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