New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Amazon ECS で Fargate Spot キャパシティープロバイダーを使用するにはどうすればよいですか?
Amazon Elastic Container Service (Amazon ECS) で AWS Fargate Spot キャパシティープロバイダーを使用したいと考えています。
簡単な説明
使用を開始する前に、次の点に注意してください。
- Fargate および Fargate Spot キャパシティープロバイダーを作成する必要はありません。これらはすべてのアカウントで使用でき、クラスターに関連付けるだけで使用できるようになります。
- Fargate Spot キャパシティープロバイダーは、ECS PutClusterCapacityProviders API および ECS put-cluster-capacity-providers の CLI コマンドリファレンスを使用して、既存のクラスターに関連付けることができます。AWS マネジメントコンソールでは、既存のクラスターへの Fargate Spot キャパシティープロバイダーの追加はサポートされていません。
- Fargate および Fargate Spot キャパシティープロバイダーは予約されており、削除できません。PutClusterCapacityProviders API を使用して、クラスターとの関連付けを解除できます。
- Fargate Spot では、タスクでプラットフォームバージョン 1.3.0 以降 (Linux の場合) を使用する必要があり、Fargate Spot キャパシティープロバイダーは Fargate 上の Windows コンテナではサポートされていません。
解決方法
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
Fargate Spot キャパシティープロバイダーの作成、クラスターへの関連付け、関連付けの解除
Fargate Spot キャパシティープロバイダーは、Networking only クラスターテンプレートを使用して Amazon ECS コンソールから作成すると、クラスターに自動的に関連付けられます。詳細については、新しいコンソールを使用して Fargate 起動タイプのクラスターを作成するを参照してください。
Fargate Spot キャパシティープロバイダーをクラスターに関連付ける
Fargate Spot キャパシティープロバイダーがまだ関連付けられていない場合は、PutClusterCapacityProviders API または次の AWS CLI コマンドを使用して、キャパシティープロバイダーをクラスターに関連付けることができます。
aws ecs put-cluster-capacity-providers \ --cluster <Cluster_name> \ --capacity-providers FARGATE FARGATE_SPOT \ --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --region <Region>
重要: キャパシティープロバイダーを上書きしないようにするには、すべての既存のキャパシティープロバイダーとキャパシティープロバイダー戦略を前述のコマンドに含めます。コマンドに含まれていないキャパシティープロバイダーは、クラスターとの関連付けが解除されます。
Fargate Spot キャパシティープロバイダーとクラスターの関連付けを解除する
クラスターに関連付けられ、PutClusterCapacityProviders API コールから省略された既存のキャパシティープロバイダーは、クラスターとの関連付けが解除されます。Amazon ECS クラスターから Fargate Spot キャパシティープロバイダーとの関連付けを解除するには、次の AWS CLI コマンドを実行します。
aws ecs put-cluster-capacity-providers \ --cluster <Cluster_name> \ --capacity-providers FARGATE \ --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 \ --region <Region>
Fargate Spot キャパシティープロバイダーが Amazon ECS クラスターに関連付けられていることを確認する
Fargate Spot キャパシティープロバイダーが Amazon ECS クラスターに関連付けられていることを確認するには、次のコマンドを実行します。
aws ecs describe-clusters \ --cluster <Cluster_name> \ --region <Region>
出力は次のようになります。
Output: "capacityProviders": [ "FARGATE", "FARGATE_SPOT" ]
注: 前述のコマンドの出力には、Amazon ECS クラスターに関連付けられているキャパシティープロバイダーを含む capacityProviders セクションが含まれています。
Fargate Spot キャパシティープロバイダーを使用してタスクを実行したり、サービスを作成したりする
Fargate Spot キャパシティープロバイダーを使用してタスクを実行するには、次のコマンドを実行します。
aws ecs run-task \ --cluster <Cluster_name> \ --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \ --task-definition <Task_definition_family>:<revision> \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count <Number_of_Tasks> \ --region <Region>
Fargate Spot キャパシティープロバイダーを使用する Amazon ECS サービスを作成するには、次のコマンドを実行します。
aws ecs create-service \ --cluster <Cluster_name> \ --service-name <Service_name> \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --task-definition <Task_defintition_family>:<revision> \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count <Number_of_tasks> \ --region <Region>
Fargate Spot キャパシティープロバイダーでタスクが実行されていることを検証する
タスクが Fargate キャパシティープロバイダーを使用していることを確認するには、次のコマンドを実行します。
aws ecs describe-tasks --cluster <Cluster_name> \ --tasks <TaskID> \ --region <Region>
Amazon CloudWatch からのサービスごとの Fargate OnDemand と Fargate Spot の使用状況の追跡は、現在サポートされていません。ただし、CloudWatch を使用して Fargate OnDemand と Spot の合計使用量のメトリクスを表示できます。詳細については、AWS Fargate 使用状況メトリクスをご参照ください。
よくある質問
Fargate Spot のベストプラクティスにはどのようなものがありますか?
- Fargate Spot は、ステートレスでフォールトトレラントなワークロードには最適ですが、重要なワークロードを Spot タスクだけに頼るわけではありません。代わりに、通常の Fargate タスクを組み合わせて設定します。
- SIGTERM シグナルを受信して、割り込みを正常に処理します。SIGTERM シグナルを受信するときは、StopTimeout を 120 秒に設定するのがベストプラクティスです。詳細については、ECS によるグレースフルシャットダウンを参照してください。
- Fargate Spot で実行されるアプリケーションは、フォールトトレラントである必要があります。
FARGATE_SPOT キャパシティーが使用できない場合、タスクはどうなりますか?
キャパシティーが使用できないために ECS スケジューラがタスクを起動できない場合、SERVICE_TASK_PLACEMENT_FAILURE イベントが発せられます。タスクは PROVISIONING の第 1 段階には到達せず、ECS イベントに通知も表示されません。ECS スケジューラは、引き続きタスクの起動を試行します。キャパシティーが使用可能になると、SERVICE_STEADY_STATE イベントが発せられます。
Fargate Spot キャパシティーが使用できない場合、Fargate へのフェイルオーバーはありますか?
利用可能な FARGATE_SPOT キャパシティーがない場合、FARGATE にフェイルバックするメカニズムを設定することはできません。
ECS サービスでキャパシティープロバイダーを使用する場合に、タスクがどのように配置されるかの例を挙げてください。
この例では、次の 2 つのキャパシティープロバイダーを含むキャパシティープロバイダー戦略があります。
Provider 1: FARGATE | Base:2 Weight:1 Provider 2: FARGATE_SPOT | Base:0 Weight:3
この戦略によれば、基本値が満たされると、FARGATE を使用して実行するタスクごとに、3 つのタスクが FARGATE_SPOT を使用します。ECS サービスが望まれるカウント (5) で作成されると、次のようになります。
- 基本値を満たすために FARGATE を使用して 2 つのタスクが起動され、残りの 3 つは FARGATE と FARGATE_SPOT の間で 1:3 の比率で分割されます。
- FARGATE を使用して 3 つのタスクを実行し、FARGATE_SPOT で 2 つのタスクを実行します。
この同じ戦略を使用して、スケールアウトイベントが発生し、望まれるカウントが 9 に増加します。ECS スケジューラは、ベースが満たされた FARGATE を使用して 3 つのタスクがすでに実行されていることを確認します。また、PROVISIONING 状態にある新しい 4 つのタスクが FARGATE と FARGATE_SPOT の間で 1:3 の比率で分割されます。最後の 4 つのタスクは FARGATE を使用して実行され、5 つのタスクは FARGATE_SPOT で実行されます。

関連するコンテンツ
- 質問済み 1年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 4年前
- AWS公式更新しました 9ヶ月前
- AWS公式更新しました 1年前