Amazon ECS 服務部署的 lifecycle hook - Amazon Elastic Container Service

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

Amazon ECS 服務部署的 lifecycle hook

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

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

  • 輪詢 API,會啟動另一個非同步程序來評估 lifecycle hook 完成情況。

函式執行完成後,必須傳回 hookStatus,部署才能繼續。如果未傳回 hookStatus,或函式執行失敗,部署將會復原。以下為 hookStatus 的值:

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

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

  • IN_PROGRESS – Amazon ECS 會在短時間內再次執行函式。預設時間間隔為 30 秒,但此值可透過在傳回 hookStatus 時同時傳回 callBackDelay 進行自訂。

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

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

發生復原時,Amazon ECS 會為下列生命週期階段執行 lifecycle hook:

  • PRODUCTION_TRAFFIC_SHIFT

  • TEST_TRAFFIC_SHIFT

生命週期承載

為 ECS 服務部署設定 lifecycle hook 時,Amazon ECS 會在部署程序的特定階段調用這些勾點。每個生命週期階段都會提供 JSON 承載,其中包含有關目前部署狀態的資訊。本文件主要介紹每個生命週期階段的承載結構。

常見的承載結構

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

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

  • targetServiceRevisionArn – 正在部署的目標服務修訂版的 ARN。

  • testTrafficWeights – 服務修訂版 ARN 對其對應測試流量權重百分比的映射。

  • productionTrafficWeights – 服務修訂版 ARN 對其對應生產流量權重百分比的映射。

生命週期階段承載

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

Lifecycle hook 期間的部署狀態

Lifecycle hook 執行期間,所有生命週期階段的部署狀態都將是 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