Amazon ECS 服務部署的生命週期掛鉤 - Amazon Elastic Container Service

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

Amazon ECS 服務部署的生命週期掛鉤

部署開始時,會經歷生命週期階段。這些階段可能處於 IN_PROGRESS 或成功等狀態。您可以使用 lifecycle hook,這是 Amazon ECS 在指定生命週期階段代表您執行的 Lambda 函數。這些函數可以是下列其中一項:

  • 非同步 API,可在 15 分鐘內驗證運作狀態檢查。

  • 輪詢 API,會啟動另一個非同步程序來評估生命週期掛鉤完成。

函數執行完成後,必須傳回 hookStatus 部署以繼續。如果hookStatus未傳回 ,或如果 函數失敗,則部署會轉返。以下是這些hookStatus值:

  • SUCCEEDED - 部署會繼續進入下一個生命週期階段

  • FAILED – 部署會復原至上次成功的部署。

  • IN_PROGRESS – Amazon ECS 會在短時間內再次執行函數。根據預設,這是 30 秒的間隔,但此值可透過在 callBackDelaySeconds旁邊傳回 來自訂hookStatus

下列範例顯示如何傳回hookStatus具有自訂回呼延遲的 。在此範例中,Amazon ECS 會在 60 秒內重試此勾點,而不是預設的 30 秒:

{ "hookStatus": "IN_PROGRESS", "callBackDelaySeconds": 60 }

當復原發生時,Amazon ECS 會執行下列生命週期階段的生命週期關聯:

  • PRODUCTION_TRAFFIC_SHIFT

  • TEST_TRAFFIC_SHIFT

生命週期承載

當您設定 ECS 服務部署的生命週期掛鉤時,Amazon ECS 會在部署程序的特定階段調用這些掛鉤。每個生命週期階段都會提供 JSON 承載,其中包含部署目前狀態的相關資訊。本文件說明每個生命週期階段的承載結構。

常見的承載結構

所有生命週期階段承載都包含下列常見欄位:

  • serviceArn - 服務的 Amazon Resource Name (ARN)。

  • targetServiceRevisionArn - 要部署之目標服務修訂的 ARN。

  • testTrafficWeights - 服務修訂 ARNs 對應至其對應測試流量權重百分比的映射。

  • productionTrafficWeights - 服務修訂 ARNs 對應至其對應生產流量權重百分比的映射。

生命週期階段承載

RECONCILE_SERVICE

當服務正在對帳時,此階段會在部署程序開始時發生。以下顯示此生命週期階段的範例承載。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 }, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 } }

在此階段的期望:

  • 主要任務集的規模為 0%

PRE_SCALE_UP

此階段會在新任務擴展之前發生。以下顯示此生命週期階段的範例承載。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

在此階段的期望:

  • 綠色服務修訂任務規模為 0%

POST_SCALE_UP

此階段會在新任務擴展且運作狀態良好之後發生。以下顯示此生命週期階段的範例承載。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

在此階段的期望:

  • 綠色服務修訂任務的規模為 100%

  • 綠色服務修訂中的任務狀況良好

TEST_TRAFFIC_SHIFT

當測試流量轉移到綠色服務修訂任務時,就會發生此階段。

以下顯示此生命週期階段的範例承載。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 }, "productionTrafficWeights": {} }

在此階段的期望:

  • 測試流量正在朝綠色服務修訂任務邁進。

POST_TEST_TRAFFIC_SHIFT

此階段會在測試流量完全轉移到新任務之後發生。

以下顯示此生命週期階段的範例承載。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

在此階段的期望:

  • 100% 的測試流量已移至綠色服務修訂任務。

PRODUCTION_TRAFFIC_SHIFT

當生產流量轉移到綠色服務修訂任務時,就會發生此階段。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 } }

在此階段的期望:

  • 生產流量正在移至綠色服務修訂。

POST_PRODUCTION_TRAFFIC_SHIFT

此階段會在生產流量完全轉移到綠色服務修訂任務之後發生。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

在此階段的期望:

  • 100% 的生產流量移至綠色服務修訂任務。

生命週期階段類別

生命週期階段分為兩個類別:

  1. 單一調用階段 - 在服務部署期間,這些階段只會調用一次:

    • PRE_SCALE_UP

    • POST_SCALE_UP

    • POST_TEST_TRAFFIC_SHIFT

    • POST_PRODUCTION_TRAFFIC_SHIFT

  2. 重複調用階段 - 在服務部署期間,可能會多次調用這些階段,例如發生回復操作時:

    • TEST_TRAFFIC_SHIFT

    • PRODUCTION_TRAFFIC_SHIFT

生命週期關聯期間的部署狀態

當生命週期掛鉤正在執行時,部署狀態將IN_PROGRESS適用於所有生命週期階段。

生命週期階段 部署狀態
RECONCILE_SERVICE IN_PROGRESS
PRE_SCALE_UP IN_PROGRESS
POST_SCALE_UP IN_PROGRESS
TEST_TRAFFIC_SHIFT IN_PROGRESS
POST_TEST_TRAFFIC_SHIFT IN_PROGRESS
PRODUCTION_TRAFFIC_SHIFT IN_PROGRESS
POST_PRODUCTION_TRAFFIC_SHIFT IN_PROGRESS