适用于 Amazon ECS 服务部署的暂停钩子
暂停钩子在特定的生命周期阶段暂停 Amazon ECS 服务部署,并等待您调用 ContinueServiceDeployment 后再进行部署。在继续部署之前需要手动审批或外部验证的情况下,请使用暂停钩子。
暂停钩子的工作方式
当部署进入配置了暂停钩子的生命周期阶段时,将发生以下情况:
-
Amazon ECS 为
hookId暂停钩子生成一个唯一值。 -
Amazon ECS 发出详细信息类型为
ECS Hook State Change且事件名称为HOOK_AWAITING_ACTION的 EventBridge 事件。 -
在通过
hookId和CONTINUE或ROLLBACK操作调用ContinueServiceDeployment,或者达到配置的超时时间之前,部署将保持暂停状态。
您可以通过调用 DescribeServiceDeployments 来检索 hookId。响应包括一个带有钩子状态的 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 |
否 |
约束
-
每个服务最多可以配置 10 个暂停钩子和 10 个 Lambda 钩子。
-
暂停钩子不使用
hookTargetArn或roleArn。这些字段仅适用于 Lambda 钩子。 -
不能在
TEST_TRAFFIC_SHIFT或PRODUCTION_TRAFFIC_SHIFT阶段配置暂停钩子。
继续暂停的部署
部署暂停时(暂停钩子状态为 AWAITING_ACTION),需通过 hookId 和要执行的操作调用 ContinueServiceDeployment。
继续部署:
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 字段,查看超时何时到期。
使用线性部署和金丝雀部署的暂停钩子
对于线性部署和灰度部署,在 PRE_PRODUCTION_TRAFFIC_SHIFT 阶段配置的暂停钩子将在每个流量转移步骤中进行调用。每次调用都会生成一个唯一 hookId,您必须为每个 ID 调用 ContinueServiceDeployment。
例如,线性部署有 5 个流量转移步骤,PRE_PRODUCTION_TRAFFIC_SHIFT 阶段的暂停钩子会暂停 5 次,即执行每个步骤之前一次。每次暂停都需要通过相应的 hookId 单独调用 ContinueServiceDeployment。
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" } }