すべてのプロダクト
Search
ドキュメントセンター

Auto Scaling:Function Compute を使用して ECS スケールインポリシーをカスタマイズする

最終更新日:Apr 08, 2025

Elastic Compute Service (ECS) インスタンスのスケールインポリシー (CPU 使用率が最も低いインスタンスを優先するなど) をカスタマイズするには、Function Compute を使用できます。スケールインイベント中に、Auto Scaling は指定された条件を満たす ECS インスタンスをスケーリンググループから自動的に削除します。

背景情報

Auto Scaling は複数のスケールインポリシーをサポートしています。スケールイン時には、インスタンスの作成時間やスケーリング設定などの基準に基づいて、スケーリンググループからインスタンスを削除します。詳細については、「スケーリングポリシーとスケールインポリシーを組み合わせる」をご参照ください。

スケーリングの需要が高いビジネスの場合、ニーズに合わせてカスタムスケールインポリシーを作成できます。 カスタムスケールインポリシーを実装するには、次のシナリオで Auto Scaling と Function Compute を併用することをお勧めします。

  • シナリオ 1:ビジネスへの影響を軽減するために、CPU 負荷が最も低いインスタンスを最初にスケールインします。

  • シナリオ 2:コストとリソース使用量を最適化しながらサービスの継続性を維持するために、スケジュールに基づいてアイドル状態のインスタンスを最初にスケールインします。

前提条件

  • Function Compute が有効化されており、関連する権限付与が完了していること。詳細については、「手順 1:Function Compute を有効化する」をご参照ください。

  • Simple Log Service が有効化されており、関連する権限付与が完了していること。詳細については、「はじめに」をご参照ください。

手順

手順 1:関数の作成

Alibaba Cloud は、Function Compute 2.0 と 3.0 の両方を提供しています。このトピックでは、Function Compute 2.0 を使用してカスタムスケールインポリシーを作成する方法について説明します。

  1. Function Compute コンソール にログインします。

    [Function Compute 3.0] が表示されている場合は、[Function Compute 2.0 に戻る] をクリックできます。

    函数计算2.0.jpg

  2. 左側のナビゲーションウィンドウで、[サービスと関数] をクリックします。

  3. 上部のナビゲーションバーで、リージョンを選択します。

  4. サービスを作成します。

    1. [サービス] ページで、[サービスの作成] をクリックします。

    2. [サービスの作成] パネルで、ビジネス要件に基づいて [名前][説明][ロギング] パラメータを設定し、[OK] をクリックします。

      次の表は、この例で使用されているパラメータ設定を示しています。この表に記載されていないパラメータについては、デフォルト値を使用してください。詳細については、「サービスを作成する」をご参照ください。

      パラメータ

      説明

      [名前]

      test-service

      Function Compute サービスの名前を入力します。名前は、UI に表示される形式の要件に従う必要があります。

      [説明]

      test

      Function Compute サービスの説明を入力します。

      [ロギング]

      有効

      ロギング機能を有効にするかどうかを指定します。ロギング機能を有効にすると、Function Compute は永続ストレージのために関数の実行ログを Simple Log Service に送信します。ログに基づいてコードのデバッグ、障害の分析、データの分析を行うことができます。

  5. 関数を作成します。

    1. 作成したサービスの名前をクリックして、サービス詳細ページに移動します。次に、左側のナビゲーションウィンドウで [関数] をクリックします。

    2. [関数の作成] をクリックします。

    3. [関数の作成] ページで、パラメータを設定して関数の作成を完了し、[作成] をクリックします。

      この例では、[組み込みランタイムを使用] メソッドを選択して関数を作成します。次の表は、この例で使用されているパラメータ設定を示しています。この表に記載されていないパラメータについては、デフォルト値を使用してください。詳細については、「関数を作成する」をご参照ください。

      パラメータ

      説明

      [基本設定]

      [関数名]

      test-fc

      関数の名前を入力します。名前は、UI に表示される形式の要件に従う必要があります。

      [ハンドラタイプ]

      イベントハンドラ

      有効な値:

      • [イベントハンドラ]:関数はイベントリクエストを処理します。

      • [HTTP ハンドラ]:関数は HTTP または WebSocket リクエストを処理します。

      [コード]

      [ランタイム]

      Python 3.9

      コードのランタイム環境を選択します。

      [コードのアップロード方法]

      Hello, world!

      関数コードを Function Compute にアップロードする方法を選択します。

  6. 関数コードをコンパイルしてデプロイします。

    1. 関数名をクリックして、関数詳細ページに移動します。

    2. [コード] タブで、コードエディタに index.py という名前のファイルを作成し、[デプロイ] をクリックします。

      関数コードでは、vCPU 使用率の低下やスケジューリングのシステム要件など、ビジネスニーズに基づいてカスタム削除条件を設定できます。

      この例では、ECS インスタンスの数 (Capacity) と指定されたインスタンス ID の順序 (InstanceId) をスケールイン条件として使用しています。サンプルコード:

      # -*- coding: utf-8 -*-
      import logging
      import json
      
      
      def handler(event, context):
          evt = json.loads(event)
          logger = logging.getLogger()
          logger.info(evt)
          removeCount = 0
          if "CapacityToRemove" in evt:
              for cp in evt["CapacityToRemove"]:
                  logger.info(cp["Capacity"])
                  removeCount += int(cp["Capacity"])
          instances_to_terminate = []
          if "Instances" in evt:
              for i in evt["Instances"]:
                  instances_to_terminate.append(i["InstanceId"])
          response = {
              'InstanceIds': instances_to_terminate[:removeCount]
          }
          logger.info(response)
          return response
      
  7. (オプション) 関数をテストします。

    1. [コード] タブで、图标[関数のテスト] の横にある [テスト パラメーターの構成] アイコンをクリックし、ドロップダウンリストから を選択します。

    2. テストコードを入力し、[OK] をクリックします。

      この例では、次のコードをテストします。コードでは、ScalingGroupId は管理するスケーリンググループの ID を指定します。CapacityToRemove は、Auto Scaling が cn-beijing-g ゾーンから ECS インスタンスを 1 つ削除することを指定します。Instances は、スケールインできる ECS インスタンスの ID を指定します。

      {
      	"ScalingGroupARN": "acs:ess:cn-beijing:160998252992****.scalinggroup/asg-2zei8mzn72rb115k****",
      	"ScalingGroupId": "asg-2zei8mzn72rb115k****",
      	"CapacityToRemove": [{
      		"ZoneId": "cn-beijing-g",
      		"Capacity": 1
      	}],
      	"Instances": [{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		},
      		{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		},
      		{
      			"InstanceId": "i-2zeinb37ovdsx6l0****",
      			"ZoneId": "cn-beijing-g",
      			"InstanceType": "ecs.g7.xlarge",
      			"ChargeType": "PostPaid"
      		}
      	],
      	"AdjustmentType": "SystemScaleIn"
      }
    3. [コード] タブで [関数のテスト] をクリックします。

    4. [結果] タブで、テスト結果を表示します。

      出力が次のコードのようになっている場合、Auto Scaling はスケールインイベント中に ID が最初にランク付けされた ECS インスタンスを削除します。

      {
          "InstanceIds": [
              "i-2zeinb37ovdsx6l0****"
          ]
      }
  8. 表示されるページの上部で、[バージョンの公開] をクリックし、次に [OK] をクリックします。

手順 2:インスタンス削除ポリシーの設定

このセクションでは、スケーリンググループの作成時にインスタンス削除ポリシーを設定する方法について説明します。既存のスケーリンググループの場合は、必要に応じてポリシーを変更できます。

  1. Auto Scaling コンソール にログインします。

  2. スケーリンググループを作成します。

    1. [スケーリンググループ] ページで、[スケーリンググループの作成] をクリックします。

    2. パラメータを設定してグループの作成を完了し、[作成] をクリックします。

      次の表は、この例で使用されているパラメータ設定を示しています。この表に記載されていないパラメータについては、デフォルト値を使用してください。詳細については、「スケーリンググループを管理する」をご参照ください。

      实例移出策略.png

      パラメータ

      説明

      [スケーリンググループ名]

      test

      スケーリンググループの名前を入力します。名前は、UI に表示される形式の要件に従う必要があります。

      [タイプ]

      ECS

      スケーリンググループによって管理されるインスタンスのタイプを指定します。

      この例では、このパラメータは [ECS] に設定されています。

      [インスタンス設定ソース]

      新規作成

      Auto Scaling が ECS インスタンスを作成できるテンプレートを選択します。

      この例では、このパラメータは [新規作成] に設定されています。この値は、スケーリンググループの作成時にテンプレートが指定されていないことを示します。スケーリンググループを作成した後、スケーリング設定を作成します。

      [スケールインポリシー]

      カスタムポリシー

      • サービス:test-service

      • バージョン:LATEST

      • 関数:test-fc

      インスタンススケールインポリシーを指定します。

      この例では、[カスタムポリシー] を選択し、次に作成した関数を選択します。

      [最小インスタンス数]

      0

      最小インスタンス制限を指定します。スケーリンググループ内のインスタンス数がこのパラメータの値よりも少ない場合、Auto Scaling はスケーリンググループ内の ECS インスタンス数が最小制限に達するまで ECS インスタンスをスケーリンググループに追加します。

      [最大インスタンス数]

      5

      最大インスタンス制限を指定します。スケーリンググループ内のインスタンス数がこのパラメータの値よりも多い場合、Auto Scaling はスケーリンググループ内の ECS インスタンス数が最大制限に減少するまで ECS インスタンスをスケーリンググループから削除します。

      [予想インスタンス数を有効にする] および [予想インスタンス数]

      有効および 3

      [予想インスタンス数] 機能を有効にし、予想インスタンス数を指定します。Auto Scaling は、スケーリンググループ内の予想される ECS インスタンス数を自動的に維持します。

  3. スケーリング設定を作成します。詳細については、「ECS タイプのスケーリング設定を作成する」をご参照ください。

  4. スケーリンググループを有効にします。詳細については、「スケーリンググループを有効または無効にする」をご参照ください。

    この例では、[予想インスタンス数] の値は 3 です。したがって、Auto Scaling はスケーリンググループに 3 つの ECS インスタンスを自動的に作成します。

手順 3:スケールイン効果の確認

  1. スケールインイベントをトリガーし、スケールインされた ECS インスタンスに関する情報をチェックします。

    1. スケールインイベントをトリガーするには、予想インスタンス数パラメータを変更します。詳細については、「スケーリンググループを表示または変更する」をご参照ください。

      重要

      スケジュールされたタスク、イベントトリガーされたタスク、またはスケーリングルールのman手動実行によってスケールインイベントをトリガーできます。ただし、[最小インスタンス数] および [最大インスタンス数] パラメータを変更してスケールインする場合、Function Compute 経由で作成されたカスタムスケールインポリシーは有効になりません。

      この例では、カスタムスケールイン効果をテストするために、[予想インスタンス数] パラメータを 2 に設定します。スケーリンググループには最初に 3 つの ECS インスタンスがあったため、この調整によりスケールインイベントがトリガーされ、1 つのインスタンスが削除されます。

    2. スケールインイベントの詳細を表示し、スケールインされた ECS インスタンスに関する情報をチェックします。詳細については、「スケーリングアクティビティの詳細を表示する」をご参照ください。

      この例では、スケールインされた ECS インスタンスの ID は i-2ze2qdthrkpf****tldq です。

      自定义缩容.png

  2. 関数の呼び出しログを表示して、関数の呼び出しレコードを確認します。

    1. Function Compute コンソール[サービス] ページで、サービスの名前をクリックします。

    2. [関数] ページで、関数の名前をクリックします。

    3. 関数詳細ページで、[ログ] タブをクリックします。

    4. [リクエスト] タブの [リクエストリスト] タブで、スケールインイベントをトリガーしたリクエストを見つけ、リクエスト ID をクリックします。

    5. リクエスト詳細ページで、[ログの詳細] をクリックして、スケールインイベントによってトリガーされた関数の呼び出しのログを表示します。

      この図は、Auto Scaling が Function Compute にスケールインする ECS インスタンスの目標数とその ID をどのように提供するかを示しています。次に、Function Compute は関数を実行し、スケールインされたインスタンスの ID を返します。この例では、返された ID (i-2ze2qdthrkpf****tldq) は実際にスケールインされたインスタンスと一致します。

      函数计算日志.png