Amazon ECS 서비스 배포용 일시 중지 훅(Pause hooks)
Amazon ECS 서비스 배포용 일시 중지 훅(Pause hooks)
일시 중지 훅은 특정 수명주기 단계에서 Amazon ECS 서비스 배포를 일시 중지하고, 배포가 진행되기 전에 ContinueServiceDeployment를 호출할 때까지 기다려요. 배포가 계속되기 전에 수동 승인이나 외부 검증이 필요할 때 일시 중지 훅을 사용하세요.
출처: 문서
본문
일시 중지 훅은 특정 수명주기 단계에서 Amazon ECS 서비스 배포를 일시 중지하고, 배포가 진행되기 전에 ContinueServiceDeployment를 호출할 때까지 기다립니다. 배포가 계속되기 전에 수동 승인이나 외부 검증이 필요할 때 사용해요.
일시 중지 훅 동작 방식
배포가 일시 중지 훅이 구성된 수명주기 단계에 도달하면 다음이 발생합니다.
- Amazon ECS가 일시 중지 훅에 대한 고유
hookId를 생성합니다. - Amazon ECS가 detail-type이
ECS Hook State Change이고 이벤트 이름이HOOK_AWAITING_ACTION인 EventBridge 이벤트를 방출합니다. - 배포는
CONTINUE또는ROLLBACK작업으로hookId를 사용해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 훅을 구성할 수 있습니다.
- 일시 중지 훅은
hookTargetArn이나roleArn을 사용하지 않습니다. 이 필드들은 Lambda 훅 전용입니다. - 일시 중지 훅은
TEST_TRAFFIC_SHIFT나PRODUCTION_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
자세한 내용은 "Continuing service deployments"를 참고하세요.
같은 단계에서 여러 훅
같은 수명주기 단계에 여러 훅이 구성되면, 그 단계의 모든 훅이 계속될 때까지 배포는 일시 중지된 상태로 유지됩니다. 어느 훅이든 롤백을 트리거하면, 그 단계의 다른 훅 상태와 관계없이 전체 배포가 롤백됩니다. 이 동작은 같은 수명주기 단계에 Lambda 훅과 일시 중지 훅이 모두 구성될 때도 적용됩니다. 배포는 그 단계의 모든 훅이 성공적으로 완료되거나 계속될 때만 진행됩니다.
같은 수명주기 단계에 구성된 모든 훅은 병렬로 실행됩니다.
타임아웃 동작
타임아웃이 만료되기 전에 ContinueServiceDeployment를 호출하지 않으면, Amazon ECS는 구성된 타임아웃 작업을 수행합니다.
- ROLLBACK (기본값) — Amazon ECS가 배포를 이전 서비스 리비전으로 롤백합니다.
- CONTINUE — Amazon ECS가 다음 수명주기 단계로 배포를 계속합니다.
타임아웃이 언제 만료되는지 확인하려면 DescribeServiceDeployments 응답의 lifecycleHookDetails 배열에 있는 expiresAt 필드를 확인하세요.
선형·카나리 배포와 일시 중지 훅
선형·카나리 배포의 경우, PRE_PRODUCTION_TRAFFIC_SHIFT에 구성된 일시 중지 훅이 각 트래픽 전환 단계마다 호출됩니다. 각 호출은 고유한 hookId를 생성하며, 각각에 대해 ContinueServiceDeployment를 호출해야 합니다.
예를 들어 트래픽 전환 단계가 5개인 선형 배포와 PRE_PRODUCTION_TRAFFIC_SHIFT의 일시 중지 훅은 5번 일시 중지됩니다(각 단계 전에 한 번씩). 각 일시 중지는 해당 hookId로 ContinueServiceDeployment를 별도로 호출해야 합니다.
EventBridge 이벤트
Amazon ECS는 일시 중지 훅이 수명주기를 진행하면서 detail-type이 ECS Hook State Change인 EventBridge 이벤트를 방출합니다. 다음 표는 이벤트 이름을 설명합니다.
| 이벤트 이름 | 설명 |
|---|---|
HOOK_AWAITING_ACTION |
훅이 ContinueServiceDeployment를 호출해 주기를 기다리고 있습니다. |
HOOK_SUCCEEDED |
훅이 성공적으로 완료되었습니다(CONTINUE로 ContinueServiceDeployment를 호출함). |
HOOK_FAILED |
훅이 실패했습니다(ROLLBACK으로 ContinueServiceDeployment를 호출함). |
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"
}
}
더 알아보기 (Learn more)
- 서비스 배포 계속하기와 배포 수명주기 훅에 대한 자세한 내용은 AWS 공식 문서를 참고해 주세요.