本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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% 的生產流量已流向綠色服務修訂版任務。
生命週期階段類別
生命週期階段分為兩個類別:
-
單次調用階段 – 這些階段在服務部署期間僅調用一次:
PRE_SCALE_UP
POST_SCALE_UP
POST_TEST_TRAFFIC_SHIFT
POST_PRODUCTION_TRAFFIC_SHIFT
-
重複調用階段 – 這些階段在服務部署期間可能會多次調用,例如發生復原操作時:
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 |