适用于 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% 的生产流量已向绿色服务修订任务转移。
生命周期阶段类别
生命周期阶段分为两类:
-
单次调用阶段:这些阶段在服务部署期间仅调用一次:
PRE_SCALE_UP
POST_SCALE_UP
POST_TEST_TRAFFIC_SHIFT
POST_PRODUCTION_TRAFFIC_SHIFT
-
重复调用阶段:这些阶段在服务部署期间可能会被多次调用,例如发生回滚操作时:
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 | 进行中 |