

# 适用于 Amazon ECS 服务部署的生命周期挂钩
<a name="deployment-lifecycle-hooks"></a>

部署开始时，它会经历生命周期的各个阶段。每个阶段都可以处于 `IN_PROGRESS` 或 `SUCCEEDED` 等状态。您可以在特定阶段配置生命周期挂钩，以在部署开始之前运行自定义逻辑或引入决策点。Amazon ECS 支持以下两种类型的生命周期挂钩：

Lambda 钩子  
Amazon ECS 在部署的特定阶段调用 Lambda 函数。您的函数中包含自定义逻辑，并且必须返回一个 `hookStatus` 为 `SUCCEEDED`、`FAILED` 或 `IN_PROGRESS` 的 JSON 对象，以告知 Amazon ECS 如何继续。您可以使用这些钩子来运行验证测试、强制执行治理策略，或在部署之前实施自定义审批步骤。有关更多信息，请参阅 [适用于 Amazon ECS 服务部署的 Lambda 钩子](lambda-lifecycle-hooks.md)。

暂停钩子  
Amazon ECS 在配置的某个生命周期阶段暂停部署，等待您调用 `ContinueServiceDeployment` API 继续或回滚。暂停后，您可以在外部运行自己的工作流程，例如手动审批、使用现有工具进行集成测试、运行就绪状态检查或 CI/CD 管道步骤。有关更多信息，请参阅 [适用于 Amazon ECS 服务部署的暂停钩子](pause-lifecycle-hooks.md)。

您可以在同一个生命周期阶段同时配置 Lambda 钩子和暂停钩子。在部署进入下一个阶段之前，两个钩子必须全部完成。

## 生命周期挂钩详细信息
<a name="lifecycle-hook-details-overview"></a>

当钩子在部署期间处于活动状态时，可通过调用 `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。 | 

## 生命周期阶段类别
<a name="lifecycle-stage-categories"></a>

生命周期阶段分为两类：

1. **单次调用阶段**：Amazon ECS 在服务部署期间只会调用这些阶段一次：
   + `RECONCILE_SERVICE`
   + `PRE_SCALE_UP`
   + `POST_SCALE_UP`
   + `TEST_TRAFFIC_SHIFT`
   + `POST_TEST_TRAFFIC_SHIFT`
   + `POST_PRODUCTION_TRAFFIC_SHIFT`

1. **重复调用阶段**：Amazon ECS 可以在服务部署期间多次调用这些阶段。对于线性部署和金丝雀部署，将在每个流量转移步骤中调用以下阶段：
   + `PRE_PRODUCTION_TRAFFIC_SHIFT`
   + `PRODUCTION_TRAFFIC_SHIFT`

**注意**  
无法在 `TEST_TRAFFIC_SHIFT` 或 `PRODUCTION_TRAFFIC_SHIFT` 阶段配置暂停钩子，因为这些阶段也将在回滚期间调用。回滚期间暂停需要额外调用 `ContinueServiceDeployment` 才能完成回滚。

## 按钩子类型划分的支持阶段
<a name="lifecycle-hooks-supported-stages"></a>


| 生命周期阶段 | 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 | 是 | 是 | 