

# Amazon ECS での AWS Fargate タスク廃止に備える
<a name="prepare-task-retirement"></a>

タスク廃止への準備を行うには、以下の手順を実行します。

1. タスク廃止の待機期間を設定するか、Amazon EC2 イベントウィンドウを使用します。

1. タスク廃止通知をキャプチャして、チームメンバーに通知します。

1. 強制デプロイオプションでサービスを更新することにより、すべてのサービスのタスクが最新のプラットフォームリビジョンで実行されるようにすることができます。この手順は省略可能です。

## ステップ 1: タスクの待機時間を設定、または Amazon EC2 イベントウィンドウを使用する
<a name="prepare-task-retirement-set-time"></a>

 Fargate がタスク廃止を開始する時刻の設定には、`fargateTaskRetirementWaitPeriod` と `fargateEventWindows` の 2 つのアカウント設定オプションがあります。

**fargateTaskRetirementWaitPeriod アカウント設定の使用**

Fargate がタスク廃止を開始する時間を設定できます。デフォルトの待機時間は 7 日間です。アップデートをすぐに適用する必要があるワークロードの場合は、即時設定 (`0`) を選択します。これより長い時間が必要な場合は、`7` 日または `14` 日オプションを設定します。

新しいプラットフォームバージョンのリビジョンを早く取得できるように、待機時間を短くすることをお勧めします。

待機時間を設定するには、ルートユーザーまたは管理者ユーザーで `put-account-setting-default` または `put-account-setting` を実行します。`fargateTaskRetirementWaitPeriod` オプションを `name` に使用し、`value` オプションを次のいずれかの値に設定します。
+ `0` - AWS から通知が送信され、影響を受けたタスクが直ちに廃止されます。
+ `7` - AWS から通知が送信され、7 日間待機してから、影響を受けたタスクの廃止が開始されます。これがデフォルトです。
+ `14` - AWS から通知が送信され、14 日間待機してから、影響を受けたタスクの廃止が開始されます。

詳細については、「Amazon Elastic Container Service API リファレンス」の「[put-account-setting-default](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting-default.html)」と「[put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)」を参照してください。

**fargateEventWindows アカウント設定の使用**

2025 年 12 月 18 日より、Amazon ECS で Fargate タスク向けの [Amazon EC2 イベントウィンドウ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)を設定できるようになりました。業務時間中の中断を避けるためにタスク廃止を週末にスケジュールするなど、廃止のタイミングを正確に制御する必要がある場合は、タスク、サービス、またはクラスターに Amazon EC2 イベントウィンドウを設定できます。

イベントウィンドウを使用する場合、Fargate は、ユーザーが開始したアクション、または基盤ハードウェアの劣化などの重大な正常性イベントによってタスクが停止された場合を除き、タスクが次に使用可能なウィンドウ内で少なくとも 3 日間実行されてから廃止されるようにします。

`fargateEventWindows` アカウント設定を `enabled` に設定します。`put-account-setting-default` API または `put-account-setting` API のいずれかをルートユーザーまたは管理者ユーザーとして使用できます。

 各 Amazon EC2 イベントウィンドウの時間枠は少なくとも週に 4 時間 (各時間範囲は少なくとも 2 時間) にする必要があります。大規模なクラスターやサービスの場合は、長時間 (8 時間以上) のイベントウィンドウ、または時間範囲がより頻繁に実施される (少なくとも 3 日に 1 度) イベントウィンドウを設定することが推奨されます。Amazon EC2 イベントウィンドウの考慮事項については、[ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html#event-windows-considerations)で詳細を確認できます。AWS Fargate は、ユーザーが開始したアクション、または基盤ハードウェアの劣化などの重大な正常性イベントによってタスクが停止された場合を除き、タスクが少なくとも 3 日間実行されてから廃止されるようにします。

**重要**  
イベントウィンドウ内でのタスクの置き換えはベストエフォートです。イベントウィンドウ外でタスクが廃止されていることに気付いた場合は、時間を延長する (8 時間以上) か、頻度を増やす (少なくとも 3 日に 1 度) ことを検討してください。

Amazon EC2 イベントウィンドウを Fargate タスクの廃止に適用する:
+ `fargateEventWindows` アカウント設定を `enabled` に設定します。`put-account-setting-default` API または `put-account-setting` API のいずれかをルートユーザーまたは管理者ユーザーとして使用できます。これは、Fargate タスクに Amazon EC2 イベントウィンドウ機能を使用するための 1 回限りの有効化であることに注意してください。
+ AWS コンソールまたは AWS CLI を使用して Amazon EC2 イベントウィンドウを作成します。CLI を使用してイベントウィンドウを作成するには、時間範囲または cron 式を設定した EC2 `create-instance-event-window` API を使用します。レスポンス内の `InstanceEventWindowId` を記録しておきます。

  ```
  aws ec2 create-instance-event-window \
                      --time-range StartWeekDay=monday,StartHour=2,EndWeekDay=wednesday,EndHour=8 \
                      --tag-specifications "ResourceType=instance-event-window,Tags=[{Key=K1,Value=V1" \
                      --name myEventWindowName
  ```

  また、EC2 イベントウィンドウの作成時には、cron 式を使用することも可能です。

  ```
  aws ec2 create-instance-event-window \
                      --cron-expression "* 21-23 * * 2,3" \
                      --tag-specifications "ResourceType=instance-event-window,Tags=[{Key=K1,Value=V1" \
                      --name myEventWindowName
  ```
+ その後、EC2 `associate-instance-event-window` API を使用して、アカウント内の特定のサービス、クラスター、またはすべてのタスクにイベントウィンドウを関連付けることができます。
  + ECS サービスタスクの場合

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:serviceArn,Value=your-service-arn}]"
    ```
  + ECS クラスターの場合

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:clusterArn,Value=your-cluster-arn}]"
    ```
  + イベントウィンドウをアカウント内のすべてのタスクに関連付ける

    ```
    aws ec2 associate-instance-event-window \
    --instance-event-window-id iew-0abcdef1234567890 \
    --association-target "InstanceTags=[{Key=aws:ecs:fargateTask,Value=true}]"
    ```

キーと値のペアを複数使用して、イベントウィンドウを複数のサービスまたはクラスターに関連付けることができます。

Fargate は、各タスクのイベントウィンドウを次の順序で選択します。
+ タスクのサービスに関連付けられたイベントウィンドウがある場合は、そのウィンドウが使用されます。これは、スタンドアロンタスクまたはアンマネージドタスクには適用されません。
+ タスクのクラスターに関連付けられたイベントウィンドウがある場合は、そのウィンドウが使用されます。
+ すべての Fargate タスクに設定されたイベントウィンドウがある場合は、そのウィンドウが使用されます。
+ `fargateTaskRetirementWaitPeriod` 設定は、タスクに一致するイベントウィンドウがない場合に使用されます。

**Fargate タスクのメンテナンス用イベントウィンドウの設定**

異なる可用性要件を持つ複数の ECS サービスが Fargate で実行されている状況を考えてみましょう。こうした状況では、タスクの廃止を正確に制御する必要があります。次のように複数のイベントウィンドウを設定できます。
+ **すべての Fargate タスク向けのデフォルトメンテナンス**: オフピーク時間 (毎日午前 12 時から午前 4 時) に定期的なメンテナンス用のイベントウィンドウを作成し、` aws:ecs:fargateTask` タグを使用してすべての Fargate タスクに関連付けます。
+ **開発クラスター向けの週末限定メンテナンス**: 週末の中断に対応できるサービスが含まれる開発クラスターには、24 時間の週末ウィンドウ (土曜日と日曜日の終日) を作成し、`aws:ecs:clusterArn` タグとクラスター ARN を使用してクラスターに関連付けます。
+ **ミッションクリティカルなサービス向けの制限付きウィンドウ**: 平日に高いアップタイムを維持する必要があるミッションクリティカルな決済処理サービスの場合は、メンテナンスを週末の早朝時間 (土曜日と日曜日の午前12 時から午前 4 時) に制限し、`aws:ecs:serviceArn` タグとサービス ARN を使用して特定のサービスに関連付けます。

この設定では、決済サービスが特定の週末限定ウィンドウ、開発クラスターのサービスとタスクが週末の 24 時間ウィンドウ、他のすべての Fargate タスクがデフォルトの日次メンテナンスウィンドウを使用します。

詳細については、「Amazon Elastic Container Service API リファレンス」の「[put-account-setting-default](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting-default.html)」と「[put-account-setting](https://docs.aws.amazon.com/cli/latest/reference/ecs/put-account-setting.html)」を参照してください。

## ステップ 2: タスク廃止通知をキャプチャしてチームに警告し、措置を講じる
<a name="prepare-task-retirement-capture-task-events"></a>

近日実施されるタスク廃止があるときは、AWS が AWS Health ダッシュボード、および AWS アカウント の主要 E メール連絡先にタスク廃止通知を送信します。AWS Health ダッシュボードは、Amazon EventBridge を含めた他の AWS サービスとの統合を多数提供しています。EventBridge を使用して、ChatOps ツールにメッセージを転送して次回の廃止の視認性を高めるなど、タスク廃止通知からオートメーションを構築することができます。AWS HealthAware は、AWS Health ダッシュボードの能力と、組織全体に通知を配布する方法を説明するリソースです。タスク廃止通知は、Slack などのチャットアプリケーションに転送できます。

以下の図は、このソリューションの概要です。

![\[Fargate のタスク廃止通知をキャプチャする Fargate ソリューションを示す図。\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/images/fargate-task-retirement-solution.png)


以下は、ソリューションの詳細情報です。
+ 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](https://slack.com/marketplace/A0F7XDUAZ-incoming-webhooks)」を参照してください。

コード例については、Github で「[Capturing AWS Fargate Task Retirement Notifications](https://github.com/aws-samples/capturing-aws-fargate-task-retirement-notifications/tree/main)」を参照してください。

## ステップ 3: タスクの置き換えを制御する
<a name="prepare-task-retirement-change-time"></a>

タスク廃止の正確なタイミングを制御することはできませんが、待機時間を定義することは可能です。独自のスケジュールに従ってタスクの置き換えを制御する場合は、タスク廃止通知をキャプチャして、タスク廃止の日付を把握することから始めます。その後、サービスを再度デプロイして代替タスクを起動することができます。スタンドアロンタスクも同様に置き換えます。ローリングデプロイを使用するサービスの場合は、廃止の開始時刻の前に、`force-deployment` オプションがある `update-service` を使用してサービスを更新します。

次の `update-service` 例では、`force-deployment` オプションを使用しています。

```
aws ecs update-service —-service service_name \ 
    --cluster cluster_name \
     --force-new-deployment
```

ブルー/グリーンデプロイを使用するサービスの場合は、AWS CodeDeploy で新しいデプロイメントを作成する必要があります。デプロイを作成する方法については、*AWS Command Line Interfaceリファレンス*の「[create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html)」を参照してください。