适用于 Amazon ECS 服务部署的生命周期挂钩 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 Amazon ECS 服务部署的生命周期挂钩

部署启动后,会经历一系列生命周期阶段。这些阶段可能处于“IN_PROGRESS”或已成功等状态。您可以使用生命周期挂钩,这是 Amazon ECS 在指定的生命周期阶段代表您运行的 Lambda 函数。这些函数可以是以下任一项:

  • 异步 API,可在 15 分钟内验证运行状况检查。

  • 轮询 API,可启动另一个异步进程,用于评估生命周期挂钩的完成情况。

函数运行结束后,必须返回 hookStatus 才能继续部署。如果未返回 hookStatus,或者函数失败,部署将回滚。以下是 hookStatus 的值:

  • SUCCEEDED:部署将持续到下一个生命周期阶段

  • FAILED:部署将回滚到上次成功部署。

  • IN_PROGRESS:Amazon ECS 将在短时间内再次运行该函数。默认情况下,时间间隔为 30 秒,但是可以通过在返回 hookStatus 的同时一并返回的 callBackDelaySeconds 来自定义该值。

以下示例演示了如何返回带有自定义回调延迟的 hookStatus。在此示例中,Amazon ECS 将在 60 秒(不是默认的 30 秒)后重试此挂钩:

{ "hookStatus": "IN_PROGRESS", "callBackDelaySeconds": 60 }

发生回滚时,Amazon ECS 会为以下生命周期阶段运行生命周期挂钩:

  • PRODUCTION_TRAFFIC_SHIFT

  • TEST_TRAFFIC_SHIFT

生命周期有效载荷

为 ECS 服务部署配置生命周期挂钩时,Amazon ECS 会在部署过程的特定阶段调用这些挂钩。每个生命周期阶段都会提供包含当前部署状态相关信息的 JSON 有效载荷。本文档描述了每个生命周期阶段的有效载荷结构。

常用有效载荷结构

所有生命周期阶段的有效载荷均包含以下常用字段:

  • serviceArn:服务的 Amazon 资源名称(ARN)。

  • targetServiceRevisionArn:正在部署的目标服务修订的 ARN。

  • testTrafficWeights:服务修订 ARN 到与其对应的测试流量权重百分比的映射。

  • productionTrafficWeights:服务修订 ARN 到与其对应的生产流量权重百分比的映射。

生命周期阶段有效载荷

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% 的生产流量已向绿色服务修订任务转移。

生命周期阶段类别

生命周期阶段分为两类:

  1. 单次调用阶段:这些阶段在服务部署期间仅调用一次:

    • PRE_SCALE_UP

    • POST_SCALE_UP

    • POST_TEST_TRAFFIC_SHIFT

    • POST_PRODUCTION_TRAFFIC_SHIFT

  2. 重复调用阶段:这些阶段在服务部署期间可能会被多次调用,例如发生回滚操作时:

    • TEST_TRAFFIC_SHIFT

    • PRODUCTION_TRAFFIC_SHIFT

生命周期挂钩运行期间的部署状态

生命周期挂钩运行时,所有生命周期阶段的部署状态都将为 IN_PROGRESS

生命周期阶段 部署状态
RECONCILE_SERVICE 进行中
PRE_SCALE_UP 进行中
POST_SCALE_UP 进行中
TEST_TRAFFIC_SHIFT 进行中
POST_TEST_TRAFFIC_SHIFT 进行中
PRODUCTION_TRAFFIC_SHIFT 进行中
POST_PRODUCTION_TRAFFIC_SHIFT 进行中