适用于 Amazon ECS 服务部署的生命周期挂钩
部署开始时,它会经历生命周期的各个阶段。每个阶段都可以处于 IN_PROGRESS 或 SUCCEEDED 等状态。您可以在特定阶段配置生命周期挂钩,以在部署开始之前运行自定义逻辑或引入决策点。Amazon ECS 支持以下两种类型的生命周期挂钩:
- Lambda 钩子
-
Amazon ECS 在部署的特定阶段调用 Lambda 函数。您的函数中包含自定义逻辑,并且必须返回一个
hookStatus为SUCCEEDED、FAILED或IN_PROGRESS的 JSON 对象,以告知 Amazon ECS 如何继续。您可以使用这些钩子来运行验证测试、强制执行治理策略,或在部署之前实施自定义审批步骤。有关更多信息,请参阅 适用于 Amazon ECS 服务部署的 Lambda 钩子。 - 暂停钩子
-
Amazon ECS 在配置的某个生命周期阶段暂停部署,等待您调用
ContinueServiceDeploymentAPI 继续或回滚。暂停后,您可以在外部运行自己的工作流程,例如手动审批、使用现有工具进行集成测试、运行就绪状态检查或 CI/CD 管道步骤。有关更多信息,请参阅 适用于 Amazon ECS 服务部署的暂停钩子。
您可以在同一个生命周期阶段同时配置 Lambda 钩子和暂停钩子。在部署进入下一个阶段之前,两个钩子必须全部完成。
生命周期挂钩详细信息
当钩子在部署期间处于活动状态时,可通过调用 DescribeServiceDeployments 来查看其状态。响应包含一个 lifecycleHookDetails 数组,每个活动钩子都有以下字段:
| 字段 | 说明 |
|---|---|
hookId |
此钩子执行的唯一标识符。为暂停钩子调用 ContinueServiceDeployment 时使用此值。 |
targetType |
钩子类型:AWS_LAMBDA 或 PAUSE。 |
targetArn |
目标钩子的 ARN。对于 Lambda 钩子,指 Lambda 函数的 ARN。对于暂停钩子,此字段未设置。 |
status |
钩子的当前状态:AWAITING_ACTION、IN_PROGRESS、SUCCEEDED、FAILED 或 TIMED_OUT。 |
expiresAt |
钩子到期的日期和时间。(示例:2026-05-06T12:06:49-07:00) |
timeoutAction |
Amazon ECS 在钩子超时时执行的操作:ROLLBACK 或 CONTINUE。 |
生命周期阶段类别
生命周期阶段分为两类:
-
单次调用阶段:Amazon ECS 在服务部署期间只会调用这些阶段一次:
RECONCILE_SERVICEPRE_SCALE_UPPOST_SCALE_UPTEST_TRAFFIC_SHIFTPOST_TEST_TRAFFIC_SHIFTPOST_PRODUCTION_TRAFFIC_SHIFT
-
重复调用阶段:Amazon ECS 可以在服务部署期间多次调用这些阶段。对于线性部署和金丝雀部署,将在每个流量转移步骤中调用以下阶段:
PRE_PRODUCTION_TRAFFIC_SHIFTPRODUCTION_TRAFFIC_SHIFT
注意
无法在 TEST_TRAFFIC_SHIFT 或 PRODUCTION_TRAFFIC_SHIFT 阶段配置暂停钩子,因为这些阶段也将在回滚期间调用。回滚期间暂停需要额外调用 ContinueServiceDeployment 才能完成回滚。
按钩子类型划分的支持阶段
| 生命周期阶段 | Lambda 钩子 | 暂停钩子 |
|---|---|---|
RECONCILE_SERVICE |
支持 | 是 |
PRE_SCALE_UP |
是 | 是 |
POST_SCALE_UP |
是 | 是 |
TEST_TRAFFIC_SHIFT |
是 | 否 |
POST_TEST_TRAFFIC_SHIFT |
是 | 是 |
PRE_PRODUCTION_TRAFFIC_SHIFT |
是 | 是 |
PRODUCTION_TRAFFIC_SHIFT |
是 | 否 |
POST_PRODUCTION_TRAFFIC_SHIFT |
是 | 是 |