

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 準備在 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`。

**使用 fargateTaskRetirementWaitPeriod 帳戶設定**

您可以設定 Fargate 開始任務淘汰的時間。預設等待期間為 7 天。對於需要立即套用更新的工作負載，請選擇立即設定 (`0`)。如果您需要更多時間，請設定 `7`或`14`日期選項。

我們建議您選擇較短的等待期，以便更快獲得更新的平台版本修訂版。

透過以根使用者或管理使用者的身分執行 `put-account-setting-default` 或 `put-account-setting` 來設定等待期間。對 `name` 使用 `fargateTaskRetirementWaitPeriod` 選項，並將 `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 帳戶設定**

自 12/18/2025 起，Amazon ECS 可讓您為 Fargate 任務設定 [Amazon EC2 事件時段](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)。如果您需要精確控制任務淘汰的確切時間，例如，將它們安排在週末以避免上班時間中斷，您可以為您的任務、服務或叢集設定 Amazon EC2 事件時段。

當您使用事件時段時，Fargate 會確保您的任務在下一個可用時段內淘汰前至少執行 3 天，除非使用者啟動的動作或重大運作狀態事件停止，例如基礎硬體降級。

將 `fargateEventWindows` 帳戶設定設為 `enabled`。您可以使用下列其中一個 APIs： `put-account-setting-default` 或 `put-account-setting`做為根使用者或管理使用者。

 每個 Amazon EC2 事件時段每週必須開放至少 4 小時，而且每個時間範圍必須至少 2 小時。對於大型叢集和服務，我們建議設定事件時段，其持續時間較長 (8 小時或以上） 或更頻繁，至少每 3 天發生一次。您可以進一步檢閱[使用者指南](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html#event-windows-considerations) AWS Fargate 中 Amazon EC2 事件時段的考量，確保您的任務在淘汰前執行至少 3 天，除非使用者啟動的動作或重大運作狀態事件停止，例如基礎硬體降級。

**重要**  
最好在事件時段內取代任務。如果您注意到任務在事件時段之外遭到淘汰，請考慮延長持續時間 (8 小時或以上） 或增加頻率 （至少每 3 天一次）。

若要將 Amazon EC2 事件時段套用至 Fargate 任務淘汰：
+ 將 `fargateEventWindows` 帳戶設定設為 `enabled`。您可以使用下列其中一個 APIs： `put-account-setting-default` 或 `put-account-setting`做為根使用者或管理使用者。請注意，這是針對 Fargate 任務使用 Amazon EC2 事件時段功能的一次性啟用。
+ 透過 AWS 主控台或 AWS CLI 建立 Amazon EC2 事件視窗。若要使用 CLI 建立事件時段，請使用 EC2 `create-instance-event-window` API 搭配時間範圍或 Cron 表達式。記下`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 任務維護的事件時段**

當您在具有不同可用性需求的 Fargate 上執行多個 ECS 服務時，請考慮一個案例。您想要精確控制任務淘汰。您可以設定多個事件時段，如下所示：
+ **所有 Fargate 任務的預設維護**：在離峰時間 （每天 12AM 到 4AM) 建立例行維護的事件時段，並使用 ` aws:ecs:fargateTask`標籤將其與所有 Fargate 任務建立關聯。
+ **開發叢集的週末限定維護**：對於具有可容忍週末中斷服務的開發叢集，請建立 24 小時週末時段 （週六和週日，全天），並使用 `aws:ecs:clusterArn`標籤與叢集 ARN 將其與叢集建立關聯。
+ **關鍵任務服務的限制時段**：對於在工作日需要高正常執行時間的任務關鍵付款處理服務，請將維護限制為週末凌晨時間 （週六和週日，12AM 點至上午 4AM)，並將其與您的服務 ARN 使用 `aws:ecs:serviceArn` 標籤與特定服務建立關聯。

透過此組態，付款服務會使用其特定的僅限週末時段，開發叢集服務和任務會使用週末 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 帳戶。 AWS Health 儀表板提供多種與其他 AWS 服務的整合，包括 Amazon EventBridge。您可以使用 EventBridge 從任務淘汰通知建立自動化，例如透過將訊息轉送到 ChatOps 工具來提高即將淘汰的可見性。 AWS Health Aware 是一種資源，可顯示 AWS Health 儀表板的強大功能，以及如何將通知分佈到整個組織中。您可以將任務淘汰通知轉送至 Slack 等聊天應用程式。

下圖說明了解決方案概觀。

![\[此圖表顯示用於擷取 Fargate 任務淘汰通知的 Fargate 解決方案。\]](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/images/fargate-task-retirement-solution.png)


下面提供相關詳細資訊。
+ Fargate 會將任務淘汰通知傳送至 AWS Health 儀表板。
+  AWS Health 儀表板會將郵件傳送至 上的主要電子郵件聯絡人 AWS 帳戶，並通知 EventBridge。
+ EventBridge 具備可擷取淘汰通知的規則。

  此規則用於篩選「事件詳細類型」如下的事件：`"AWS Health Event" and the Event Detail Type Code: "AWS_ECS_TASK_PATCHING_RETIREMENT"`
+ 此規則會觸發 Lambda 函式，該函式會透過 Slack 傳入 Webhook 將資訊轉送至 Slack。如需詳細資訊，請參閱 [Incoming Webhooks](https://slack.com/marketplace/A0F7XDUAZ-incoming-webhooks)。

如需程式碼範例，請參閱在 Github [上擷取 AWS Fargate 任務淘汰通知](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 Reference* 中的 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html)。