本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
準備在 Amazon ECS 上淘汰 AWS Fargate 任務
若要為任務淘汰做準備,請執行下列操作:
-
設定任務淘汰等待期間或使用 Amazon EC2 事件時段。
-
擷取任務淘汰通知,以便通知團隊成員。
-
您可以使用強制部署選項更新服務,以確保所有服務的任務在最新的平台修訂版上執行。此為選擇性步驟。
步驟 1:設定任務等待時間或使用 Amazon EC2 事件時段
您有兩個帳戶設定選項來設定 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 和 put-account-setting。
使用 fargateEventWindows 帳戶設定
自 12/18/2025 起,Amazon ECS 可讓您為 Fargate 任務設定 Amazon EC2 事件時段。如果您需要精確控制任務淘汰的確切時間,例如,將它們安排在週末以避免在上班時間中斷,您可以為您的任務、服務或叢集設定 Amazon EC2 事件時段。
當您使用事件時段時,Fargate 會確保您的任務在下一個可用時段內淘汰前至少執行 3 天,除非使用者啟動的動作或重大運作狀態事件停止,例如基礎硬體降級。
將 fargateEventWindows 帳戶設定設為 enabled。您可以使用下列其中一個 APIs: put-account-setting-default 或 put-account-setting做為根使用者或管理使用者。
每個 Amazon EC2 事件時段必須至少每週開啟 4 小時,且每個時間範圍必須至少為 2 小時。對於大型叢集和服務,我們建議設定事件時段,其持續時間較長 (8 小時或以上) 或更頻繁,至少每 3 天發生一次。您可以進一步檢閱使用者指南 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-windowAPI 搭配時間範圍或 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" \ --namemyEventWindowName或者,您可以在建立 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" \ --namemyEventWindowName -
然後,您可以使用 EC2
associate-instance-event-windowAPI 將事件視窗與帳戶中的特定服務、叢集或所有任務建立關聯。-
對於 ECS 服務任務
aws ec2 associate-instance-event-window \ --instance-event-window-idiew-0abcdef1234567890\ --association-target "InstanceTags=[{Key=aws:ecs:serviceArn,Value=your-service-arn}]" -
對於 ECS 叢集
aws ec2 associate-instance-event-window \ --instance-event-window-idiew-0abcdef1234567890\ --association-target "InstanceTags=[{Key=aws:ecs:clusterArn,Value=your-cluster-arn}]" -
將事件時段與帳戶中的所有任務建立關聯
aws ec2 associate-instance-event-window \ --instance-event-window-idiew-0abcdef1234567890\ --association-target "InstanceTags=[{Key=aws:ecs:fargateTask,Value=true}]"
-
您可以使用多個鍵值對,將事件時段與多個服務或叢集建立關聯。
Fargate 會依下列順序為每個任務選擇事件時段:
-
如果有與任務服務相關聯的事件時段,則會使用該時段。這不適用於獨立或未受管任務。
-
如果有與任務叢集相關聯的事件時段,則會使用該時段。
-
如果為所有 Fargate 任務設定了事件時段,則會使用該時段。
-
如果沒有事件時段與任務相符,則會使用
fargateTaskRetirementWaitPeriod設定。
設定 Fargate 任務維護的事件時段
當您在具有不同可用性需求的 Fargate 上執行多個 ECS 服務時,請考慮一個案例。您想要精確控制任務淘汰。您可以設定多個事件時段,如下所示:
-
所有 Fargate 任務的預設維護:在離峰時間 (每天凌晨 12 點到凌晨 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 和 put-account-setting。
步驟 2:擷取任務淘汰通知,提醒團隊採取動作
當即將淘汰任務時, 會將任務淘汰通知 AWS 傳送至 AWS Health 儀表板,以及傳送至 上的主要電子郵件聯絡人 AWS 帳戶。 AWS Health 儀表板提供許多與其他 AWS 服務的整合,包括 Amazon EventBridge。您可以使用 EventBridge 從任務淘汰通知建立自動化,例如透過將訊息轉送到 ChatOps 工具來提高即將淘汰的可見性。 AWS Health Aware 是一種資源,可顯示 AWS Health 儀表板的強大功能,以及如何將通知分散到整個組織中。您可以將任務淘汰通知轉送至 Slack 等聊天應用程式。
下圖說明了解決方案概觀。
下面提供相關詳細資訊。
-
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
。
如需程式碼範例,請參閱在 Github 上擷取 AWS Fargate 任務淘汰通知
步驟 3:控制任務替代時機
您無法控制任務淘汰的確切時間,但可以定義等待時間。若需按照自訂排程控制取代任務,您可以擷取任務淘汰通知,先了解任務淘汰日期。然後,您可以重新部署服務來啟動替代任務,並同步取代所有獨立任務。對於使用滾動部署的服務,您可以在淘汰開始時間前,搭配 force-deployment 選項使用 update-service 來更新服務。
下列 update-service 範例使用 force-deployment 選項。
aws ecs update-service —-serviceservice_name\ --clustercluster_name\ --force-new-deployment
對於使用藍/綠部署的服務,您需要在 AWS CodeDeploy中建立新的部署。如需有關如何建立部署的資訊,請參閱 AWS Command Line Interface Reference 中的 create-deployment。