部署斷路器 - Amazon Elastic Container Service

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

部署斷路器

部署斷路器是可確定任務是否達到穩定狀態的滾動式更新機制。部署斷路器邏輯有一個選項,可將失敗的部署自動復原至處於 COMPLETED 狀態的部署。

當服務部署狀態變更時,Amazon ECS 會將服務部署狀態變更事件傳送到 EventBridge。這提供一種程式設計方式來監控您的服務部署的狀態。如需詳細資訊,請參閱 Amazon ECS 服務部署狀態變更事件。我們建議您使用eventName的建立和監視 EventBridge規則,以SERVICE_DEPLOYMENT_FAILED便您可以採取手動動作來開始部署。如需詳細資訊,請參Amazon EventBridge 使用者指南中的建立 EventBridge 規則

當部署斷路器判斷部署失敗時,會尋找處於 COMPLETED 狀態的最新部署。這是部署斷路器用來做為復原部署的部署。復原開始時,部署會從 COMPLETED 變更為 IN_PROGRESS。這表示在部署到達 COMPLETED 狀態之前,不符合另一個復原的資格。當部署斷路器找不到處於 COMPLETED 狀態的部署時,斷路器不會啟動新任務,且會阻礙部署。

當您建立服務時,排程器會追蹤分兩個階段啟動失敗的工作。

  • 階段 1-排程器會監視工作,以查看它們是否已轉換為 RUNNING 狀態。

    • 成功-部署有機會轉換至「已完成」狀態,因為有一個以上的工作已轉換為 RUNNING 狀態。跳過失敗準則,斷路器將移至階段 2。

    • 失敗-有些工作未轉換為 RUNNING 狀態,且部署可能會轉換為「失敗」狀態。

  • 階段 2-當至少有一個工作處於 RUNNING 狀態時,部署會進入此階段。斷路器會檢查目前部署中正在評估的工作狀態檢查。通過驗證的健康狀態檢查包括 Elastic Load Balancing、 AWS Cloud Map 服務健康狀態檢查和容器健康狀態檢查

    • 成功-在執行中狀態中至少有一項工作,且運作狀態檢查已通過。

    • 失敗-因健全狀況檢查失敗而取代的工作已達到失敗臨界值。

在服務上使用部署斷路器方法時,請考慮下列事項。 EventBridge會產生規則。

  • DescribeServices 回應可提供部署狀態洞察,rolloutStaterolloutStateReason。當啟動新的部署時,推展狀態從 IN_PROGRESS 狀態開始。當服務到達穩定狀態時,推展狀態轉移到 COMPLETED。若服務無法達到穩定狀態,而斷路器已開啟,則部署將轉換為 FAILED 狀態。處於 FAILED 狀態的部署不會啟動任何新任務。

  • 除 Amazon ECS 為已開始和已完成的部署傳送服務部署狀態變更事件以外,Amazon ECS 還會在開啟的斷路器部署失敗時傳送事件。這些事件提供有關部署失敗原因的詳細資訊,或者部署是否因為回復而開始。如需詳細資訊,請參閱 Amazon ECS 服務部署狀態變更事件

  • 如果新的部署因為先前的部署失敗並發生復原而開始,服務部署狀態變更事件的 reason 欄位將指示部署因為復原而開始。

  • 部署斷路器僅支援使用滾動更新 (ECS) 部署控制器的 Amazon ECS 服務。

  • 您必須使用 Amazon ECS 主控台,或者在使用部署斷路器 AWS CLI 時搭配選 CloudWatch 項。如需詳細資訊,請參閱《AWS Command Line Interface 參考》中的 使用定義的參數建立服務create-service

下列create-service AWS CLI 範例顯示如何在將部署斷路器與復原選項搭配使用時建立 Linux 服務。

aws ecs create-service \ --service-name MyService \ --deployment-controller type=ECS \ --desired-count 3 \ --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \ --task-definition sample-fargate:1 \ --launch-type FARGATE \ --platform-family LINUX \ --platform-version 1.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 時,會將失敗臨界值設定為計算的閾值 (四捨五入)。

注意

您不能更改任何一個閾值。

部署狀態檢查有兩個階段。

  1. 部署斷路器監視部署過程中的任務,並檢查處於 RUNNING 狀態的任務。當目前部署中的任務處於 RUNNING 狀態時,排程器會忽略故障條件,並繼續進行到下一個階段。當任務無法到達 RUNNING 狀態時,部署斷路器會在故障計數上增加一。當故障計數等於閾值時,部署將標記為 FAILED

  2. RUNNING狀態中有一個或多個任務時,就會輸入此階段。部署斷路器對目前部署中的任務,針對以下資源執行運作狀態檢查:

    • Elastic Load Balancing 負載平衡器

    • AWS Cloud Map 服務

    • Amazon ECS 容器運作狀態檢查

    當任務的運作狀態檢查失敗時,部署斷路器會在故障計數上增加一。當故障計數等於閾值時,部署將標記為 FAILED

下表提供一些範例。

所需的任務計數 計算 Threshold

1

3 <= 0.5 * 1 => 200
3 (計算值小於最小值)

25

3 <= 0.5 * 25 => 200
13 (值會無條件進位)

400

3 <= 0.5 * 400 => 200
200

800

3 <= 0.5 * 800 => 200
200 (計算值大於最大值)

例如,當臨界值為 3 時,斷路器會以設定為 0 的故障計數開始。當工作無法達到RUNNING狀態時,部署斷路器會將失敗次數增加 1。當失敗計數等於 3 時,部署會標記為FAILED

如需有關使用復原選項的其他範例,請參閱 Announcing Amazon ECS deployment circuit breaker (推出 Amazon ECS 部署斷路器)。