本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS 部署斷路器如何偵測故障
部署斷路器是可確定任務是否達到穩定狀態的滾動式更新機制。部署斷路器邏輯有一個選項,可將失敗的部署自動復原至處於 COMPLETED
狀態的部署。
當服務部署變更狀態時,Amazon 會將服務部署狀態變更事件ECS傳送至 EventBridge。這提供一種程式設計方式來監控您的服務部署的狀態。如需詳細資訊,請參閱Amazon ECS服務部署狀態變更事件。我們建議您使用 建立和監控 EventBridge 規則,eventName
SERVICE_DEPLOYMENT_FAILED
以便您可以採取手動動作來開始部署。如需詳細資訊,請參閱《Amazon EventBridge 使用者指南》中的 入門 EventBridge。
當部署斷路器判斷部署失敗時,會尋找處於 COMPLETED
狀態的最新部署。這是部署斷路器用來做為復原部署的部署。復原開始時,部署會從 COMPLETED
變更為 IN_PROGRESS
。這表示在達到 COMPLETED
狀態之前,部署不符合另一個復原的資格。當部署斷路器找不到處於 COMPLETED
狀態的部署時,斷路器不會啟動新任務,且會阻礙部署。
當您建立服務時,排程器會追蹤兩個階段中無法啟動的任務。
-
階段 1 - 排程器會監控任務,以查看它們是否轉換為 RUNNING 狀態。
-
成功 - 部署有機會轉換至 COMPLETED 狀態,因為有多個任務已轉換至 RUNNING 狀態。會略過故障條件,且斷路器會移至階段 2。
-
失敗 - 有連續任務未轉換為 RUNNING 狀態,而部署可能會轉換為 FAILED 狀態。
-
-
階段 2 - 當RUNNING狀態中至少有一個任務時,部署會進入此階段。斷路器會檢查正在評估的目前部署中任務的運作狀態檢查。驗證的運作狀態檢查為 Elastic Load Balancing、 AWS Cloud Map 服務運作狀態檢查和容器運作狀態檢查。
-
成功 - 至少有一個任務處於執行中狀態,並已通過運作狀態檢查。
-
失敗 - 由於運作狀態檢查失敗而取代的任務已達到失敗閾值。
-
當您在 服務上使用部署斷路器方法時,請考慮下列事項。 EventBridge 會產生規則。
-
DescribeServices
回應可提供部署狀態洞察,rolloutState
和rolloutStateReason
。當啟動新的部署時,推展狀態從IN_PROGRESS
狀態開始。當服務到達穩定狀態時,推展狀態轉移到COMPLETED
。若服務無法達到穩定狀態,而斷路器已開啟,則部署將轉換為FAILED
狀態。處於FAILED
狀態的部署不會啟動任何新任務。 -
除了 Amazon 為已啟動且已完成的部署ECS傳送的服務部署狀態變更事件之外,Amazon ECS也會在開啟斷路器的部署失敗時傳送事件。這些事件提供有關部署失敗原因的詳細資訊,或者部署是否因為回復而開始。如需詳細資訊,請參閱Amazon ECS服務部署狀態變更事件。
-
如果新的部署因為先前的部署失敗並發生復原而開始,服務部署狀態變更事件的
reason
欄位將指示部署因為復原而開始。 -
只有使用滾動更新 (
ECS
) 部署控制器的 Amazon ECS服務才支援部署斷路器。 -
當您使用部署斷路器搭配 CloudWatch 選項 AWS CLI 時,您必須使用 Amazon ECS主控台或 。如需詳細資訊,請參閱《AWS Command Line Interface 參考》中的 使用定義的參數建立服務 和 create-service。
下列create-service
AWS CLI 範例顯示當部署斷路器與復原選項搭配使用時,如何建立 Linux 服務。
aws ecs create-service \ --service-name
MyService
\ --deployment-controller type=ECS
\ --desired-count3
\ --deployment-configuration "deploymentCircuitBreaker={enable=true
,rollback=true
}" \ --task-definitionsample-fargate:1
\ --launch-typeFARGATE
\ --platform-familyLINUX
\ --platform-version1.4.0
\ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321
],securityGroups=[sg-12344321
],assignPublicIp=ENABLED
}"
範例:
部署 1 處於 COMPLETED
狀態。
部署 2 無法啟動,因此斷路器會復原至部署 1。部署 1 會轉換至 IN_PROGRESS
狀態。
部署 3 會啟動,且 COMPLETED
狀態中沒有部署,因此部署 3 無法復原或啟動任務。
Failure threshold
部署斷路器會計算閾值,然後使用該值判斷何時將部署移動到 FAILED
狀態。
部署斷路器的最小閾值為 3,最大閾值為 200。 會使用下列公式中的值來判斷部署失敗。
Minimum threshold <= 0.5 * desired task count
=> maximum threshold
當計算結果大於最小值 3,但小於最大值 200 時,失敗閾值會設定為計算閾值 (四捨五入)。
注意
您不能更改任何一個閾值。
部署狀態檢查有兩個階段。
-
部署斷路器監視部署過程中的任務,並檢查處於
RUNNING
狀態的任務。當目前部署中的任務處於RUNNING
狀態時,排程器會忽略故障條件,並繼續進行到下一個階段。當任務無法到達RUNNING
狀態時,部署斷路器會在故障計數上增加一。當故障計數等於閾值時,部署將標記為FAILED
。 -
當
RUNNING
狀態中有一或多個任務時,就會進入此階段。部署斷路器對目前部署中的任務,針對以下資源執行運作狀態檢查:-
Elastic Load Balancing 負載平衡器
-
AWS Cloud Map 服務
-
Amazon ECS容器運作狀態檢查
當任務的運作狀態檢查失敗時,部署斷路器會在故障計數上增加一。當故障計數等於閾值時,部署將標記為
FAILED
。 -
下表提供一些範例。
所需的任務計數 | 計算 | Threshold |
---|---|---|
1 |
|
3 (計算值小於最小值) |
25 |
|
13 (值會無條件進位) |
400 |
|
200 |
800 |
|
200 (計算值大於最大值) |
例如,當閾值為 3 時,斷路器會從故障計數設定為 0 開始。當任務無法達到 RUNNING
狀態時,部署斷路器會將故障計數增加一個。當失敗計數等於 3 時,部署會標記為 FAILED
。
如需如何使用復原選項的其他範例,請參閱宣布 Amazon ECS 部署斷路器