Amazon ECS で Fargate Spot キャパシティープロバイダーを使用するにはどうすればよいですか?

最終更新日: 2021 年 4 月 5 日

Amazon Elastic Container Service (Amazon ECS) で AWS Fargate Spot キャパシティープロバイダーを使用したいと考えています。

簡単な説明

使用を開始する前に、次の点に注意してください。

  • AWS コマンドラインインターフェイス (AWS CLI) または Amazon ECS API を使用してのみ、Fargate Spot キャパシティープロバイダーを Amazon ECS クラスターに関連付けることができます。
  • Fargate または Fargate Spot キャパシティープロバイダーは削除できません。
  • Fargate または Fargate Spot キャパシティープロバイダーのクラスターとの関連付けを解除できます。

注: Fargate Spot キャパシティーは予備キャパシティーで実行されるため、フォールトトレラントなタスクの実行に適しています。AWS は、必要に応じてその予備キャパシティーを取り戻すことができます。このシナリオでは、タスクは警告から 2 分後に中断されます。詳細については、AWS Fargate キャパシティープロバイダーをご参照ください。

解決方法

注: AWS CLI コマンドの実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください

クラスターを Fargate Spot キャパシティープロバイダーに関連付ける

1.    AWS マネジメントコンソールまたは次の AWS CLI コマンドを使用して、新しい Fargate クラスターを作成し、Fargate Spot キャパシティープロバイダーをクラスターに関連付けます。

$ aws ecs create-cluster --cluster-name your_Fargate_cluster_name --capacity-providers FARGATE_SPOT --region your_region

注: AWS マネジメントコンソールをネットワーキングのみのクラスターテンプレートとともに使用する場合は、Fargate クラスターと Fargate Spot キャパシティープロバイダーが関連付けられた Fargate クラスターを自動的に作成できます。

2.    (オプション) Amazon ECS クラスターから自動的に作成された Fargate Spot キャパシティープロバイダーとの関連付けを解除するには、次のコマンドを実行します。

$ aws ecs put-cluster-capacity-providers --cluster your_FargateCluster_name --capacity-providers FARGATE_SPOT --default-capacity-provider-strategy your_existing_default_capacity_provider --region your_region

Fargate Spot キャパシティープロバイダーが Amazon ECS クラスターに関連付けられていることを確認する

Fargate Spot キャパシティープロバイダーが Amazon ECS クラスターに関連付けられていることを確認するには、次のコマンドを実行します。

$ aws ecs describe-clusters --cluster your_cluster_name --region your_region

注: 前述のコマンドの出力には、[Capacity] (キャパシティー) プロバイダーのセクションが含まれています。このセクションには、Amazon ECS クラスターに関連付けられたキャパシティープロバイダーが含まれています。

既存の Amazon ECS クラスターを追加するか、Fargate Spot キャパシティープロバイダーに関連付ける

注: AWS マネジメントコンソールを使用して、Fargate Spot キャパシティープロバイダーを既存のクラスターに追加したり、関連付けたりすることはできません。代わりに AWS CLI コマンドラインを使用します。

Fargate Spot キャパシティープロバイダーに既存のクラスターを追加したり、関連付けたりするには、次のコマンドを実行します。

$ aws ecs put-cluster-capacity-providers --cluster your_Fargate_cluster_name --capacity-providers FARGATE_SPOT your_existing_capacity_provider1 --default-capacity-provider-strategy your_existing_default_capacity_provider_strategy --region your_region

重要: キャパシティープロバイダーを上書きしないようにするには、すべての既存のキャパシティープロバイダーとキャパシティープロバイダー戦略を前述のコマンドに含めます。コマンドに含まれていないキャパシティープロバイダーは、クラスターとの関連付けが解除されます。

Fargate Spot キャパシティー終了通知を処理する

Fargate Spot キャパシティープロバイダーで実行中のタスクがスポット中断により停止すると、Amazon ECS によってタスクが強制的に停止される 2 分前に警告が表示されます。警告は、Amazon EventBridge にタスク変更イベントとして送信され、実行中のタスクに SIGTERM シグナルとして送信されます。タスクがサービスの一部である場合、サービススケジューラは、Fargate Spot キャパシティープロバイダーで追加のタスクの起動を引き続き試みます。中断のシグナルを受信した後、サービススケジューラは、これらの追加の起動を試みて、キャパシティーが使用可能かどうかを確認します。

1.    イベントパターンを使用して、Amazon ECS タスク状態変更イベントの EventBridge ルールを作成します。

2.    コンテナが正常に終了するための時間を設けるには、タスク定義の [Containers Definitions] (コンテナ定義) セクションで、StopTimeout の値を 120 秒以下に設定します。

注: デフォルトの StopTimeout 値は 30 秒です。クリーンアップ操作を実行するには、コンテナ内から SIGTERM シグナルを受信する必要があります。シグナルの処理に失敗した場合、タスクは、設定された StopTimeout 値の後に SIGKILL シグナルを受信します。シグナルの障害は、データの損失や破損を引き起こす可能性があります。

タスクの状態変更 TerminationNotice イベントの例を次に示します。

{
  "version": "0",
  "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab",
  "detail-type": "ECS Task State Change",
  "source": "aws.ecs",
  "account": "111122223333",
  "resources": [
    "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef"
  ],
  "detail": {
    "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default",
    "createdAt": "2016-12-06T16:41:05.702Z",
    "desiredStatus": "STOPPED",
    "lastStatus": "RUNNING",
    "stoppedReason": "Your Spot Task was interrupted.",
    "stopCode": "TerminationNotice",
    "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE",
    ...
  }
}

Fargate Spot キャパシティープロバイダーを使用してタスクを実行したり、サービスを作成したりする

重要: Fargate Spot キャパシティープロバイダーには、AWS Fargate プラットフォームバージョン 1.3.0 が必要です。

ヒント: SIGTERM シグナルを受信したときにスタンドアロンのタスクを正常に終了する場合は、StopTimeout120 秒に設定することをお勧めします。

Fargate Spot キャパシティープロバイダーを使用してタスクを実行するには、次のコマンドを実行します。

aws ecs run-task \
   --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
   --cluster your_FargateCluster_name \
   --task-definition your_task-def-family:revision \
   --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
   --count your_integer \
   --region your_region

Fargate Spot キャパシティープロバイダーを使用してサービスを作成する

Fargate Spot キャパシティープロバイダーを使用する Amazon ECS サービスを作成するには、次のコマンドを実行します。

aws ecs create-service \ 
   --service-name your_FargateService_name \
   --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
   --cluster your_FargateCluster_name \
   --service-name your_FargateService \
   --task-definition your_task-def-family:revisio> \
   --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
   --desired-count your_integer \
   --region your_region

Fargate Spot キャパシティープロバイダーでタスクが実行されていることを確認する

タスクが Fargate キャパシティープロバイダーを使用していることを確認するには、次のコマンドを実行します。

$ aws ecs describe-tasks --cluster your_cluster_name --tasks your_task_ID --region your_region

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?