Amazon ECS での AWS Fargate タスク廃止に備える
タスク廃止への準備を行うには、以下の手順を実行します。
-
タスク廃止の待機期間を設定します。
-
タスク廃止通知をキャプチャして、チームメンバーに通知します。
-
タスク廃止の正確なタイミングを制御することはできませんが、force-deployment オプションを使用してサービスを更新することで、タスクの置き換えを制御することができます。
ステップ 1: タスクの待機時間を設定する
Fargate がタスク廃止を開始する時間を設定できます。アップデートをすぐに適用する必要があるワークロードの場合は、即時設定 (0
) を選択します。特定の時間帯にしかタスクを停止できない場合など、詳細な制御が必要な場合は、7 日 (7
) または 14 日 (14
) のオプションを設定します。
新しいプラットフォームバージョンのリビジョンを早く取得できるように、待機時間を短くすることをお勧めします。
待機時間を設定するには、ルートユーザーまたは管理者ユーザーで put-account-setting-default
または put-account-setting
を実行します。fargateTaskRetirementWaitPeriod
オプションを name
に使用し、value
オプションを次のいずれかの値に設定します。
-
0
- AWS から通知が送信され、影響を受けたタスクが直ちに廃止されます。 -
7
- AWS から通知が送信され、7 日間待機してから、影響を受けたタスクの廃止が開始されます。 -
14
- AWS から通知が送信され、14 日間待機してから、影響を受けたタスクの廃止が開始されます。
デフォルトは 7 日間です。
詳細については、「Amazon Elastic Container Service API リファレンス」の「put-account-setting-default」と「put-account-setting」を参照してください。
ステップ 2: タスク廃止通知をキャプチャしてチームに警告し、措置を講じる
近日実施されるタスク廃止があるときは、AWS が AWS Health ダッシュボード、および AWS アカウント の主要 E メール連絡先にタスク廃止通知を送信します。AWS Health ダッシュボードは、Amazon EventBridge を含めた他の AWS サービスとの統合を多数提供しています。EventBridge を使用して、ChatOps ツールにメッセージを転送して次回の廃止の視認性を高めるなど、タスク廃止通知からオートメーションを構築することができます。AWS HealthAware は、AWS Health ダッシュボードの能力と、組織全体に通知を配布する方法を説明するリソースです。タスク廃止通知は、Slack などのチャットアプリケーションに転送できます。
以下の図は、このソリューションの概要です。

以下は、ソリューションの詳細情報です。
-
Fargate がタスク廃止通知を AWS Health ダッシュボードに送信します。
-
AWS Health ダッシュボードが AWS アカウント の主要 E メール連絡先に E メールを送信し、EventBridge に通知します。
-
EventBridge には、廃止通知をキャプチャするルールがあります。
このルールは、イベント詳細タイプが
"AWS Health Event" and the Event Detail Type Code: "AWS_ECS_TASK_PATCHING_RETIREMENT"
のイベントを探します。 -
ルールが、Slack Incoming Webhook を使用して情報を Slack に転送する Lambda 関数をトリガーします。詳細については、「Incoming Webhooks
」を参照してください。
コード例については、Github で「Capturing AWS Fargate Task Retirement Notifications
ステップ 3: タスクの置き換えを制御する
タスク廃止の正確なタイミングを制御することはできませんが、待機時間を定義することは可能です。独自のスケジュールに従ってタスクの置き換えを制御する場合は、タスク廃止通知をキャプチャして、タスク廃止の日付を把握することから始めます。その後、サービスを再度デプロイして代替タスクを起動することができます。スタンドアロンタスクも同様に置き換えます。ローリングデプロイを使用するサービスの場合は、廃止の開始時刻の前に、force-deployment
オプションがある update-service
を使用してサービスを更新します。
次の update-service
例では、force-deployment
オプションを使用しています。
aws ecs update-service —-service
service_name
\ --clustercluster_name
\ --force-new-deployment
ブルー/グリーンデプロイを使用するサービスの場合は、AWS CodeDeploy で新しいデプロイメントを作成する必要があります。デプロイを作成する方法については、AWS Command Line Interface リファレンスの「create-deployment」を参照してください。