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

Auto Scaling:Function Computeを使用したECSインスタンスのカスタムスケールインポリシーの作成

最終更新日:Nov 11, 2024

Elastic Compute Service (ECS) インスタンスにスケールインする特定の要件がある場合 (たとえば、CPU使用率が最も低いECSインスタンスを優先的にスケールインする場合) 、Function Computeを使用してカスタムスケールインポリシーを作成できます。 スケールインイベント中、Auto Scalingは、カスタムスケールインポリシーの条件を満たすECSインスタンスをスケーリンググループから自動的に削除します。

背景情報

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

ビジネスでインスタンスのスケールインに対する要件が高い場合は、ビジネス要件に基づいてカスタムのスケールインポリシーを作成できます。 次のいずれかのシナリオでカスタムスケールインポリシーを作成するには、Function ComputeとAuto Scalingを併用することを推奨します。

  • シナリオ1: ビジネスへの影響を最小限に抑えるために、CPU負荷が最も低いインスタンスのスケールインに優先順位を付けます。

  • シナリオ2: スケジューリングシステムに基づいてアイドルインスタンスの数を優先的に減らし、リソース使用率を最適化し、コストを最小限に抑えながら、中断のないサービスを確保します。

前提条件

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

  • Simple Log Serviceが有効化され、関連する権限付与が完了しました。 詳細については、「入門」をご参照ください。

手順

ステップ1: 関数の作成

Alibaba Cloudは、Function Compute 2.0とFunction Compute 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] をクリックします。

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

      パラメーター

      説明

      説明

      名前

      テストサービス

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

      説明

      test

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

      ロギング

      有効にする

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

  5. 関数を作成します。

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

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

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

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

      パラメーター

      説明

      基本設定

      関数名

      テストfc

      関数の名前を入力します。 名前は、UIに表示されるフォーマット要件に従う必要があります。

      ハンドラタイプ

      イベントハンドラ

      有効な値:

      • Event Handler: 関数はイベント要求を処理します。

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

      コード

      ランタイム

      Python 3.9

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

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

      こんにちは、世界!

      関数コードを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ゾーンから1つのECSインスタンスを削除することを指定します。 インスタンスには、スケーリング可能な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インスタンスを作成できるテンプレートを選択します。

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

      スケールインポリシー

      カスタムポリシー

      • サービス: テストサービス

      • バージョン: 最新

      • 関数: テスト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. スケールインイベントをトリガーするには、Expected Number of Instancesパラメーターを変更します。 詳細については、「スケーリンググループの表示または変更」をご参照ください。

      重要

      スケジュールタスク、イベントトリガータスク、スケーリングルールの手動実行などのメソッドを使用して、スケールインイベントをトリガーできます。 ただし、最小インスタンス数パラメーターと最大インスタンス数パラメーターの変更によってトリガーされるスケールインイベント中は、Function Computeを使用して作成されたカスタムスケールインポリシーは有効になりません。

      この例では、カスタムスケールイン効果を確認するために、Expected Number of Instancesパラメーターの値を2に変更します。 スケーリンググループには以前に3つのECSインスタンスが含まれていたため、Expected Number of instancesパラメーターを変更すると、スケールインイベントがトリガーされます。 この間に、1つのECSインスタンスがスケーリンググループから削除されます。

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

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

      自定义缩容.png

  2. 関数の呼び出しログを表示して、関数呼び出しの記録を確認します。

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

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

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

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

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

      次の図は、Auto Scalingが、スケールインに必要な数のECSインスタンスと現在のインスタンスIDをFunction Computeに渡すことを示しています。 Function Computeは関数を呼び出して、スケールインされたECSインスタンスのIDを返します。 この例では、インスタンスIDはi-2ze2qdthrkpf****tldqです。これは、実際のスケールインインスタンスのIDと同じです。

      函数计算日志.png