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가 detail-type이 ECS Hook State Change이고 이벤트 이름이 HOOK_AWAITING_ACTION인 EventBridge 이벤트를 내보냅니다.

  3. hookIdCONTINUE 또는 ROLLBACK 작업을 지정하여 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

자세한 내용은 서비스 배포 계속 섹션을 참조하세요.

동일한 단계의 여러 후크

동일한 수명 주기 단계에서 여러 후크를 구성하면 해당 단계의 모든 후크가 계속될 때까지 배포가 일시 중지된 상태로 유지됩니다. 후크가 롤백을 트리거하면 해당 단계의 다른 후크 상태에 관계없이 전체 배포가 롤백됩니다.

이 동작은 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" } }