View a markdown version of this page

适用于 Amazon ECS 服务部署的暂停钩子 - Amazon Elastic Container Service

适用于 Amazon ECS 服务部署的暂停钩子

暂停钩子在特定的生命周期阶段暂停 Amazon ECS 服务部署,并等待您调用 ContinueServiceDeployment 后再进行部署。在继续部署之前需要手动审批或外部验证的情况下,请使用暂停钩子。

暂停钩子的工作方式

当部署进入配置了暂停钩子的生命周期阶段时,将发生以下情况:

  1. Amazon ECS 为 hookId 暂停钩子生成一个唯一值。

  2. Amazon ECS 发出详细信息类型为 ECS Hook State Change 且事件名称为 HOOK_AWAITING_ACTION 的 EventBridge 事件。

  3. 在通过 hookIdCONTINUEROLLBACK 操作调用 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 钩子。

  • 暂停钩子不使用 hookTargetArnroleArn。这些字段仅适用于 Lambda 钩子。

  • 不能在 TEST_TRAFFIC_SHIFTPRODUCTION_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" } }