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 を使用してカスタムスケールインポリシーを作成する方法について説明します。
Function Compute コンソール にログインします。
[Function Compute 3.0] が表示されている場合は、[Function Compute 2.0 に戻る] をクリックできます。

左側のナビゲーションウィンドウで、[サービスと関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。
サービスを作成します。
[サービス] ページで、[サービスの作成] をクリックします。
[サービスの作成] パネルで、ビジネス要件に基づいて [名前]、[説明]、[ロギング] パラメータを設定し、[OK] をクリックします。
次の表は、この例で使用されているパラメータ設定を示しています。この表に記載されていないパラメータについては、デフォルト値を使用してください。詳細については、「サービスを作成する」をご参照ください。
パラメータ
例
説明
[名前]
test-service
Function Compute サービスの名前を入力します。名前は、UI に表示される形式の要件に従う必要があります。
[説明]
test
Function Compute サービスの説明を入力します。
[ロギング]
有効
ロギング機能を有効にするかどうかを指定します。ロギング機能を有効にすると、Function Compute は永続ストレージのために関数の実行ログを Simple Log Service に送信します。ログに基づいてコードのデバッグ、障害の分析、データの分析を行うことができます。
関数を作成します。
作成したサービスの名前をクリックして、サービス詳細ページに移動します。次に、左側のナビゲーションウィンドウで [関数] をクリックします。
[関数の作成] をクリックします。
[関数の作成] ページで、パラメータを設定して関数の作成を完了し、[作成] をクリックします。
この例では、[組み込みランタイムを使用] メソッドを選択して関数を作成します。次の表は、この例で使用されているパラメータ設定を示しています。この表に記載されていないパラメータについては、デフォルト値を使用してください。詳細については、「関数を作成する」をご参照ください。
パラメータ
例
説明
[基本設定]
[関数名]
test-fc
関数の名前を入力します。名前は、UI に表示される形式の要件に従う必要があります。
[ハンドラタイプ]
イベントハンドラ
有効な値:
[イベントハンドラ]:関数はイベントリクエストを処理します。
[HTTP ハンドラ]:関数は HTTP または WebSocket リクエストを処理します。
[コード]
[ランタイム]
Python 3.9
コードのランタイム環境を選択します。
[コードのアップロード方法]
Hello, world!
関数コードを Function Compute にアップロードする方法を選択します。
関数コードをコンパイルしてデプロイします。
関数名をクリックして、関数詳細ページに移動します。
[コード] タブで、コードエディタに 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
(オプション) 関数をテストします。
[コード] タブで、
[関数のテスト] の横にある [テスト パラメーターの構成] アイコンをクリックし、ドロップダウンリストから を選択します。テストコードを入力し、[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" }[コード] タブで [関数のテスト] をクリックします。
[結果] タブで、テスト結果を表示します。
出力が次のコードのようになっている場合、Auto Scaling はスケールインイベント中に ID が最初にランク付けされた ECS インスタンスを削除します。
{ "InstanceIds": [ "i-2zeinb37ovdsx6l0****" ] }
表示されるページの上部で、[バージョンの公開] をクリックし、次に [OK] をクリックします。
手順 2:インスタンス削除ポリシーの設定
このセクションでは、スケーリンググループの作成時にインスタンス削除ポリシーを設定する方法について説明します。既存のスケーリンググループの場合は、必要に応じてポリシーを変更できます。
Auto Scaling コンソール にログインします。
スケーリンググループを作成します。
[スケーリンググループ] ページで、[スケーリンググループの作成] をクリックします。
パラメータを設定してグループの作成を完了し、[作成] をクリックします。
次の表は、この例で使用されているパラメータ設定を示しています。この表に記載されていないパラメータについては、デフォルト値を使用してください。詳細については、「スケーリンググループを管理する」をご参照ください。

パラメータ
例
説明
[スケーリンググループ名]
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 インスタンス数を自動的に維持します。
スケーリング設定を作成します。詳細については、「ECS タイプのスケーリング設定を作成する」をご参照ください。
スケーリンググループを有効にします。詳細については、「スケーリンググループを有効または無効にする」をご参照ください。
この例では、[予想インスタンス数] の値は 3 です。したがって、Auto Scaling はスケーリンググループに 3 つの ECS インスタンスを自動的に作成します。
手順 3:スケールイン効果の確認
スケールインイベントをトリガーし、スケールインされた ECS インスタンスに関する情報をチェックします。
スケールインイベントをトリガーするには、予想インスタンス数パラメータを変更します。詳細については、「スケーリンググループを表示または変更する」をご参照ください。
重要スケジュールされたタスク、イベントトリガーされたタスク、またはスケーリングルールのman手動実行によってスケールインイベントをトリガーできます。ただし、[最小インスタンス数] および [最大インスタンス数] パラメータを変更してスケールインする場合、Function Compute 経由で作成されたカスタムスケールインポリシーは有効になりません。
この例では、カスタムスケールイン効果をテストするために、[予想インスタンス数] パラメータを 2 に設定します。スケーリンググループには最初に 3 つの ECS インスタンスがあったため、この調整によりスケールインイベントがトリガーされ、1 つのインスタンスが削除されます。
スケールインイベントの詳細を表示し、スケールインされた ECS インスタンスに関する情報をチェックします。詳細については、「スケーリングアクティビティの詳細を表示する」をご参照ください。
この例では、スケールインされた ECS インスタンスの ID は
i-2ze2qdthrkpf****tldqです。
関数の呼び出しログを表示して、関数の呼び出しレコードを確認します。
Function Compute コンソール の [サービス] ページで、サービスの名前をクリックします。
[関数] ページで、関数の名前をクリックします。
関数詳細ページで、[ログ] タブをクリックします。
[リクエスト] タブの [リクエストリスト] タブで、スケールインイベントをトリガーしたリクエストを見つけ、リクエスト ID をクリックします。
リクエスト詳細ページで、[ログの詳細] をクリックして、スケールインイベントによってトリガーされた関数の呼び出しのログを表示します。
この図は、Auto Scaling が Function Compute にスケールインする ECS インスタンスの目標数とその ID をどのように提供するかを示しています。次に、Function Compute は関数を実行し、スケールインされたインスタンスの ID を返します。この例では、返された ID (i-2ze2qdthrkpf****tldq) は実際にスケールインされたインスタンスと一致します。
