View a markdown version of this page

暫停 Amazon ECS 服務部署的掛鉤 - Amazon Elastic Container Service

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

暫停 Amazon ECS 服務部署的掛鉤

暫停掛鉤會在特定的生命週期階段暫停 Amazon ECS 服務部署,並等待您呼叫 ,ContinueServiceDeployment再繼續部署。當您需要手動核准或外部驗證,才能繼續部署時,請使用暫停掛鉤。

暫停勾點的運作方式

當部署達到已設定暫停掛鉤的生命週期階段時,會發生下列情況:

  1. Amazon ECS hookId會為暫停掛鉤產生唯一的 。

  2. Amazon ECS 會發出具有 detail-type ECS Hook State Change和事件名稱 的 EventBridge 事件HOOK_AWAITING_ACTION

  3. 部署會保持暫停,直到您ContinueServiceDeployment使用 呼叫 hookIdCONTINUE或 的動作ROLLBACK,或直到達到設定的逾時為止。

您可以呼叫 hookId來擷取 DescribeServiceDeployments。回應包含具有勾點狀態的lifecycleHookDetails陣列:

{ "serviceDeployments": [ { "lifecycleHookDetails": [ { "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw", "targetType": "PAUSE", "status": "AWAITING_ACTION", "expiresAt": "2024-01-15T12:00:00Z", "timeoutAction": "ROLLBACK" } ] } ] }

設定暫停掛鉤

下列範例顯示服務定義中的暫停掛鉤組態,會在測試流量轉移完成後暫停部署:

{ "deploymentConfiguration": { "strategy": "BLUE_GREEN", "lifecycleHooks": [ { "targetType": "PAUSE", "lifecycleStages": [ "POST_TEST_TRAFFIC_SHIFT" ], "timeoutConfiguration": { "timeoutInMinutes": 10, "action": "ROLLBACK" } } ] } }

組態欄位

欄位 說明 有效值 必要
targetType 掛接的類型。必須PAUSE用於暫停勾點。 PAUSE
lifecycleStages 部署暫停的生命週期階段。 RECONCILE_SERVICE, PRE_SCALE_UP, POST_SCALE_UP, POST_TEST_TRAFFIC_SHIFT, PRE_PRODUCTION_TRAFFIC_SHIFT, POST_PRODUCTION_TRAFFIC_SHIFT
timeoutConfiguration.timeoutInMinutes 採取逾時動作之前要等待的時間。預設:1,440 分鐘 (24 小時)。 1 - 20,160 (14 天)
timeoutConfiguration.action 如果逾時過期,要採取的動作。 ROLLBACK (預設)、CONTINUE

Constraints

  • 每個服務最多可設定 10 個暫停掛鉤和 10 個 Lambda 掛鉤。

  • 暫停掛鉤不使用 hookTargetArnroleArn。這些欄位僅適用於 Lambda 勾點。

  • 暫停掛鉤無法在 TEST_TRAFFIC_SHIFTPRODUCTION_TRAFFIC_SHIFT階段設定。

繼續暫停的部署

部署暫停時 (暫停勾點狀態為 AWAITING_ACTION),請ContinueServiceDeployment呼叫 hookId和您要採取的動作。

若要繼續部署:

aws ecs continue-service-deployment \ --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \ --action CONTINUE

若要復原部署:

aws ecs continue-service-deployment \ --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \ --action ROLLBACK

如需詳細資訊,請參閱繼續服務部署

同一階段的多個勾點

在相同的生命週期階段設定多個掛鉤時,部署會保持暫停狀態,直到該階段的所有掛鉤都繼續。如果任何勾點觸發轉返,則無論該階段的其他勾點狀態為何,整個部署都會轉返。

此行為適用於在相同生命週期階段設定 Lambda 掛鉤和暫停掛鉤的情況。只有在該階段的所有勾點都成功完成或繼續時,部署才會繼續。

在相同生命週期階段設定的所有掛鉤會平行執行。

逾時行為

如果您在逾時到期ContinueServiceDeployment之前未呼叫 ,Amazon ECS 會採取設定的逾時動作:

  • ROLLBACK (預設) - Amazon ECS 會將部署復原至先前的服務修訂版。

  • CONTINUE - Amazon ECS 會繼續部署至下一個生命週期階段。

檢查DescribeServiceDeployments回應lifecycleHookDetails陣列中的 expiresAt 欄位,以查看逾時何時過期。

使用線性和 Canary 部署暫停掛鉤

對於線性和 Canary 部署,在每個流量轉移步驟PRE_PRODUCTION_TRAFFIC_SHIFT調用在 設定的暫停掛鉤。每個叫用都會產生唯一的 hookId,而且您必須ContinueServiceDeployment針對每個叫用呼叫 。

例如,具有 5 個流量轉移步驟和暫停掛鉤的線性部署會PRE_PRODUCTION_TRAFFIC_SHIFT暫停 5 次 - 在每個步驟之前一次。每次暫停都需要個別呼叫 ContinueServiceDeployment 與對應的 hookId

EventBridge 事件

Amazon ECS 會隨著暫停掛鉤的生命週期進行ECS Hook State Change,以詳細資訊類型發出 EventBridge 事件。下表說明事件名稱:

事件名稱 說明
HOOK_AWAITING_ACTION 勾點正在等待您呼叫 ContinueServiceDeployment
HOOK_SUCCEEDED 勾點已成功完成 (您使用 ContinueServiceDeployment 呼叫 CONTINUE)。
HOOK_FAILED 勾點失敗 (您使用 呼叫 ContinueServiceDeployment ROLLBACK)。
HOOK_TIMED_OUT 在呼叫 之前ContinueServiceDeployment,掛接逾時。

下列範例顯示暫停掛鉤等待動作時發出的 EventBridge 事件:

{ "version": "0", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "detail-type": "ECS Hook State Change", "source": "aws.ecs", "account": "123456789012", "time": "2024-01-15T10:00:00Z", "region": "us-west-2", "detail": { "eventType": "INFO", "eventName": "HOOK_AWAITING_ACTION", "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw", "hookType": "PAUSE", "expiresAt": "2024-01-15T12:00:00Z", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/my-cluster", "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "serviceDeploymentArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "updatedAt": "2024-01-15T10:00:00Z" } }