AWS Fargate Spot タスクでスポット終了通知を処理する方法を知りたいです。
解決策
stopTimeout 値を増やす
stopTimeout パラメータのデフォルト値は 30 秒です。タスク定義の stopTimeout 値を最大 120 秒に増やして、コンテナが強制的に停止される前に終了するのに十分な時間を確保します。このクォータを超えると、"The stopTimeout value must not exceed 120 seconds." というエラーメッセージが表示されます。
サービス定義パラメータを更新する
Amazon ECS サービス定義パラメータを更新してください。minimumHealthyPercent には、引き続き実行する必要があるタスクの最小割合を入力します。maximumPercent には、デプロイ中に実行できるタスクの最大割合を入力します。
Amazon ECS イベントをモニタリングして、タスクが中断されたときにスケジューラが新しいキャパシティを検出するかどうかを確認します。スケジューラが新しいタスクのキャパシティを見つけられない場合、古いタスクは stopTimeout の後に終了します。
登録解除の遅延値を更新する
FARGATE_SPOT として実行されるタスクは、ロードバランサーのターゲットグループを使用します。これらのタスクは、STOPPED 状態になるまでターゲットグループに登録されたままになります。ターゲットグループの登録解除の遅延を 2 分未満に設定して、スポット終了ウィンドウに対応させます。
スポットの中断とキャパシティ配置の失敗をモニタリングする
タスクの中断またはキャパシティ配置の失敗によって発生する Fargate Spot の終了をモニタリングするには、Amazon EventBridge ルールを使用します。
次の手順を実行します。
-
Amazon Simple Notification Service (Amazon SNS) トピックを作成します。
-
EventBridge ルールを定義します。
-
イベントパターンを構築して、次のオプションを選択します。
[サンプルイベント] セクションで、[AWS イベント] を選択します。
[作成方法] セクションの [方法] で、[カスタムパターン (JSON エディタ)] を選択します。
-
モニタリングしたい問題に応じて、次のパターンのいずれかを追加します。
スポットの中断
{
"source": ["aws.ecs"],
"detail-type": ["ECS Task State Change"],
"detail": {
"stopCode": ["SpotInterruption"],
"clusterArn": ["arn:aws:ecs:REGION:ACCOUNT:cluster/CLUSTER"]
}
}
キャパシティ配置の失敗
{
"source": ["aws.ecs"],
"detail-type": ["ECS Service Action"],
"detail": {
"eventName": ["SERVICE_TASK_PLACEMENT_FAILURE"],
"clusterArn": ["arn:aws:ecs:REGION:ACCOUNT:cluster/CLUSTER"],
"reason": ["RESOURCE:FARGATE"]
}
}
注: 前述のパターンでは、REGION を実際の AWS リージョンに、ACCOUNT を AWS アカウント ID に、CLUSTER をクラスター名に置き換えます。
-
[次へ] をクリックします。
-
次のオプションを選択してターゲットを選択します。
[ターゲットタイプ] で [AWS サービス] を選択します。
[ターゲットを選択] で [SNS] を選択します。
[トピック] から目的の SNS トピックを選択します。
-
[次へ] をクリックします。
-
(オプション) タグを追加します。
-
ルールの設定を確認した後、[ルールを作成] をクリックします。
関連情報
Fargate Spot 終了通知