AWS Fargate キャパシティープロバイダー - Amazon Elastic Container Service

AWS Fargate キャパシティープロバイダー

AWS Fargate キャパシティープロバイダーで Amazon ECS を使用すると、Fargate キャパシティーと Fargate Spotキャパシティーの両方を Amazon ECS タスクで使用できます。キャパシティープロバイダーの詳細については、「Amazon ECS キャパシティープロバイダー」を参照してください。

Fargate Spot を使用すると、割り込み許容 Amazon ECS タスクを、Fargate 価格と比較して割引レートで実行できます。Fargate Spot は予備のコンピュート能力でタスクを実行します。AWS がキャパシティーを戻す必要がある場合、タスクは中断され、2 分間の警告が表示されます。これについては、以下で詳しく説明します。

Fargate キャパシティープロバイダーに関する考慮事項

Fargate キャパシティープロバイダーを使用する場合は、次の点を考慮する必要があります。

  • Fargate および Fargate Spot キャパシティープロバイダーを作成する必要はありません。これらのアカウントはすべてのアカウントで使用でき、クラスターに関連付けるだけで使用できるようになります。

  • Fargate キャパシティープロバイダーと Fargate Spot キャパシティープロバイダーは予約されており、削除できません。これらのキャパシティープロバイダーは、PutClusterCapacityProviders API を使用してクラスターとの関連付けを解除できます。

  • ネットワークのみ クラスターテンプレートとともに Amazon ECS コンソールを使用して新しいクラスターを作成すると、FARGATE および FARGATE_SPOT キャパシティープロバイダーが自動的に新しいクラスターに関連付けられます。

  • 既存のクラスターに FARGATE および FARGATE_SPOT キャパシティープロバイダーを追加するには、AWS CLI または API を使用する必要があります。詳細については、「既存のクラスターへの Fargate キャパシティープロバイダーの追加」を参照してください。

  • Fargate Spot を使用するには、タスクでプラットフォームバージョン 1.3.0 以降を使用している必要があります。詳細については、「AWS Fargate プラットフォームのバージョン」を参照してください。

  • Fargate および Fargate Spot キャパシティープロバイダーを使用するタスクが停止すると、タスク状態変更イベントが Amazon EventBridge に送信されます。停止した理由は原因を説明しています。詳細については、「タスク状態変更イベント」を参照してください。

  • クラスターには、Fargate グループキャパシティープロバイダー と Auto Scaling グループキャパシティープロバイダーが混在している場合があります。ただし、キャパシティープロバイダー戦略には、Fargate または Auto Scaling グループキャパシティープロバイダーのいずれかのみを含めることができますが、両方を含めることはできません。詳細については、Amazon Elastic Container Service Developer Guide の「Auto Scaling Group Capacity Providers」を参照してください。

Fargate Spot 終了通知の処理

スポットの中断により Fargate Spot キャパシティーを使用するタスクが停止すると、タスクが停止する前に 2 分間の警告が送信されます。警告は、タスク状態変更イベントとして Amazon EventBridge に送信され、実行中のタスクに SIGTERM シグナルが送信されます。サービスの一部として Fargate Spot を使用する場合、サービススケジューラは中断信号を受信し、キャパシティーが利用可能な場合に Fargate Spot で追加のタスクを起動しようとします。タスクが 1 つしかないサービスは、キャパシティーが利用可能になるまで中断されます。

タスクが停止する前にコンテナが正常に終了するように、以下を設定できます。

  • タスクが使用しているコンテナ定義には、120 秒以下の stopTimeout 値を指定できます。stopTimeout 値を指定すると、タスク状態変更イベントが受信されてから、コンテナが強制的に停止するまでの時間が与えられます。詳細については、「コンテナのタイムアウト」を参照してください。

  • クリーンアップアクションを実行するには、コンテナ内から SIGTERM シグナルを受信する必要があります。

以下は、Fargate Spot 中断の停止理由と停止コードを表示するタスク状態変更イベントのスニペットです。

{ "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", ... } }

以下は、Amazon ECS タスク状態変更イベントの EventBridge ルールを作成するために使用されるイベントパターンです。オプションで、タスク状態変更イベントを受信するクラスターを detail フィールドで指定できます。詳細については、Amazon EventBridge ユーザーガイド の「AWS リソースからのイベントでトリガーする EventBridge ルールの作成」を参照してください。

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] } }

Fargate キャパシティープロバイダーを使用する新しいクラスターの作成

新しい Amazon ECS クラスターが作成されたら、クラスターに関連付ける 1 つ以上のキャパシティープロバイダーを指定します。関連するキャパシティープロバイダーは、タスクを実行するインフラストラクチャを決定します。

AWS マネジメントコンソール コンソールを使用して ネットワークのみ クラスターテンプレートを使用すると、FARGATE および FARGATE_SPOT キャパシティープロバイダーが自動的にクラスターに関連付けられます。詳細については、「クラスターの作成」を参照してください。

Fargate キャパシティープロバイダーを使用して Amazon ECS クラスターを作成するには (AWS CLI)

次のコマンドを使用して、新しいクラスターを作成し、Fargate と Fargate Spot キャパシティープロバイダーの両方を関連付けます。

  • create-cluster (AWS CLI)

    aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-west-2

既存のクラスターへの Fargate キャパシティープロバイダーの追加

PutClusterCapacityProviders API を使用して、既存の Amazon ECS クラスターの使用可能なキャパシティープロバイダーのプールを更新できます。

既存のクラスターへの Fargate または Fargate Spot キャパシティープロバイダーの追加は、AWS マネジメントコンソール ではサポートされていません。コンソールで新しい Fargate クラスターを作成するか、Amazon ECS API または AWS CLI を使用して既存のクラスターに Fargate または Fargate Spot キャパシティープロバイダーを追加する必要があります。

Fargate キャパシティープロバイダーを既存のクラスターに追加するには (AWS CLI)

既存のクラスターに Fargate および Fargate Spot キャパシティープロバイダーを追加するには、次のコマンドを使用します。指定したクラスターに既存のキャパシティープロバイダーが関連付けられている場合は、追加する新しいキャパシティープロバイダーに加えて、既存のキャパシティープロバイダーをすべて指定する必要があります。PutClusterCapacityProviders API コールから除外されたクラスターに関連付けられている既存のキャパシティープロバイダーは、クラスターとの関連付けが解除されます。既存のキャパシティープロバイダーをクラスターから関連付け解除できるのは、既存のタスクで使用されていない場合のみです。これらの同じ規則は、クラスターのデフォルトのキャパシティープロバイダー戦略にも適用されます。クラスターに既存のデフォルトのキャパシティープロバイダー戦略が定義されている場合は、PutClusterCapacityProviders API コールに含める必要があります。それ以外の場合は、上書きされます。

  • put-cluster-capacity-providers (AWS CLI)

    aws ecs put-cluster-capacity-providers \ --cluster FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT existing_capacity_provider1 existing_capacity_provider2 \ --default-capacity-provider-strategy existing_default_capacity_provider_strategy \ --region us-west-2

Fargate キャパシティープロバイダーを使用したタスクの実行

キャパシティープロバイダー戦略を指定して、Fargate または Fargate Spot キャパシティープロバイダーのいずれかを使用してタスクを実行したり、サービスを作成したりできます。キャパシティープロバイダー戦略が指定されていない場合は、クラスターのデフォルトのキャパシティープロバイダー戦略が使用されます。

Fargate または Fargate Spot キャパシティープロバイダーを使用したタスクの実行は、AWS マネジメントコンソール でサポートされています。AWS マネジメントコンソール を使用する場合は、クラスターのデフォルトのキャパシティープロバイダー戦略に Fargate または Fargate Spot キャパシティプロバイダーを追加する必要があります。Amazon ECS API または AWS CLI を使用する場合、キャパシティープロバイダー戦略を指定するか、クラスターのデフォルトのキャパシティープロバイダー戦略を使用できます。

Fargate キャパシティープロバイダーを使用してタスクを実行するには (AWS CLI)

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

  • run-task (AWS CLI)

    aws ecs run-task \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count integer \ --region us-west-2

Fargate キャパシティープロバイダーを使用したサービスの作成 (AWS CLI)

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

  • create-service (AWS CLI)

    aws ecs create-service \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --service-name FargateService \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count integer \ --region us-west-2