View a markdown version of this page

Amazon ECS 서비스 배포에 대한 수명 주기 후크 - Amazon Elastic Container Service

Amazon ECS 서비스 배포에 대한 수명 주기 후크

배포가 시작되면 수명 주기 단계에 따라 진행됩니다. 각 단계는 IN_PROGRESS 또는 SUCCEEDED와 같은 상태일 수 있습니다. Amazon ECS가 사용자를 대신해 지정된 수명 주기 단계에서 실행하는 Lambda 함수인 수명 주기 후크를 사용할 수 있습니다. 각 간접 호출에는 배포의 현재 상태에 대한 정보를 포함하는 JSON 페이로드가 포함됩니다.

수명 주기 후크

수명 주기 후크는 Amazon ECS가 배포의 특정 단계에서 간접적으로 호출하는 Lambda 함수입니다. 배포를 진행하기 전에 후크를 사용하여 검증 테스트를 실행하거나, 거버넌스 정책을 적용하거나, 수동 승인 단계를 구현할 수 있습니다.

Amazon ECS가 후크를 간접적으로 호출하면 함수는 hookStatus 필드가 포함된 JSON 객체를 반환해야 합니다. 선택적으로 callBackDelay를 포함하여 재시도 타이밍을 제어하고 hookDetails를 포함하여 간접 호출 간에 데이터를 전달할 수 있습니다. 함수가 유효한 hookStatus를 반환하지 않거나 실패하면 Amazon ECS가 배포를 롤백합니다.

hookStatus 값

유효한 hookStatus 값은 다음과 같습니다.

  • SUCCEEDED - 배포는 다음 수명 주기 단계로 계속 진행됩니다.

  • FAILED - Amazon ECS는 배포를 마지막으로 성공한 서비스 개정으로 롤백합니다.

  • IN_PROGRESS - Amazon ECS는 지연 후 함수를 다시 간접적으로 호출합니다. 지연 시간의 기본값은 30초입니다. callBackDelayhookStatus와 함께 반환하여 이 값을 사용자 지정할 수 있습니다.

다음 예제에서는 사용자 지정 콜백 지연으로 hookStatus를 반환하는 방법을 보여줍니다. 이 예제에서 Amazon ECS는 기본 30초 대신 60초 후에 이 후크를 다시 시도합니다.

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

hookDetails를 사용하여 상태 전달

hookDetails 필드는 수명 주기 후크 함수에 데이터를 전달하는 데 사용할 수 있는 사전입니다. hookDetails를 채우는 방법에는 두 가지가 있습니다.

  • 서비스 생성 또는 업데이트 시 - 서비스 정의 내의 수명 주기 후크 구성에서 hookDetails를 정의합니다. Amazon ECS는 간접 호출 시마다 이 데이터를 함수에 전달합니다. 이러한 방법으로 서비스별 구성을 전달하여 여러 서비스에서 후크를 재사용하도록 할 수 있습니다.

  • IN_PROGRESS 응답을 통해 런타임 시 - hookDetailsIN_PROGRESS 후크 상태와 함께 반환합니다. Amazon ECS는 다음 간접 호출 시 이 데이터를 함수에 다시 전달합니다. 외부 스토리지 없이 간접 호출 간에 상태를 유지하려면 이 옵션을 사용합니다.

다음 예제는 S3 버킷 이름을 함수에 전달하는 서비스 정의의 수명 주기 후크 구성을 보여줍니다.

{ "hookTargetArn": "arn:aws:lambda:us-west-2:123456789012:function:my-approval-hook", "roleArn": "arn:aws:iam::123456789012:role/ecs-lambda-invoke-role", "lifecycleStages": [ "POST_TEST_TRAFFIC_SHIFT" ], "hookDetails": { "S3_BUCKET_NAME": "my-approval-bucket" } }

함수가 IN_PROGRESS를 반환하면 응답에 hookDetails를 포함할 수도 있습니다. Amazon ECS는 이 데이터를 병합하여 다음 간접 호출 시 다시 전달합니다. 일반적인 사용 사례에는 간접 호출 간 지표 카운터 또는 외부 리소스 ARN 전달이 포함됩니다.

{ "hookStatus": "IN_PROGRESS", "callBackDelay": 30, "hookDetails": { "approvalChecked": true, "S3_BUCKET_NAME": "my-approval-bucket" } }

Amazon ECS는 다음 간접 호출 시 executionDetails와 함께 이벤트 페이로드에 hookDetails를 포함합니다.

{ "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} }, "hookDetails": { "approvalChecked": true, "S3_BUCKET_NAME": "my-approval-bucket" } }

함수는 이전 간접 호출의 구성 및 상태에 액세스하기 위해 event["hookDetails"]를 읽을 수 있습니다.

참고

런타임 시 hookDetails에 추가된 데이터는 단일 배포 내에서 동일한 후크의 간접 호출 간에만 유지됩니다. 데이터는 동일한 배포 내의 서로 다른 후크 또는 서로 다른 배포의 동일한 후크 간에는 전달되지 않습니다.

수명 주기 단계 범주

수명 주기 단계는 다음과 같은 두 가지 범주로 구분됩니다.

  1. 단일 간접 호출 단계 - Amazon ECS는 서비스 배포 중에 이러한 단계를 한 번만 간접 호출합니다.

    • RECONCILE_SERVICE

    • PRE_SCALE_UP

    • POST_SCALE_UP

    • POST_TEST_TRAFFIC_SHIFT

    • POST_PRODUCTION_TRAFFIC_SHIFT

  2. 반복 간접 호출 단계 - Amazon ECS는 서비스 배포 중에 이러한 단계를 여러 번 간접적으로 호출할 수 있습니다(롤백 포함).

    • TEST_TRAFFIC_SHIFT

    • PRODUCTION_TRAFFIC_SHIFT

수명 주기 페이로드

공통 페이로드 구조

Amazon ECS가 수명 주기 후크 Lambda 함수를 간접적으로 호출하면 이벤트 페이로드에는 다음과 같은 최상위 필드가 포함됩니다.

  • executionId - 이 후크 실행의 고유한 식별자.

  • lifecycleStage - 현재 수명 주기 단계(예: PRODUCTION_TRAFFIC_SHIFT).

  • resourceArn - 배포와 연결된 리소스의 ARN.

  • executionDetails - 다음 목록에 설명된 배포별 정보가 포함된 객체.

executionDetails 객체는 다음 필드를 포함합니다.

  • serviceArn - 서비스의 Amazon 리소스 이름(ARN).

  • targetServiceRevisionArn - 배포 중인 대상 서비스 개정의 ARN.

  • testTrafficWeights - 해당 테스트 트래픽 가중치 백분율에 대한 서비스 개정 ARN의 맵.

  • productionTrafficWeights - 해당 프로덕션 트래픽 가중치 백분율에 대한 서비스 개정 ARN의 맵.

다음 예제는 Lambda 함수가 수신하는 전체 이벤트 구조를 보여줍니다.

{ "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5", "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0 } } }

수명 주기 단계 페이로드

다음 섹션에서는 이 수명 주기 단계의 페이로드 예제를 보여줍니다. 이들 예제에서 그린 서비스 개정(9313423515462893900)은 배포 중인 새 개정이고 블루 서비스 개정(1920498462936580504)은 기존 프로덕션 개정입니다.

PRE_SCALE_UP

이 단계는 Amazon ECS가 그린 서비스 개정 태스크를 시작하기 전에 발생합니다. 그린 서비스 개정이 시작되지 않았으며 해당 개정으로 라우팅되는 트래픽이 없습니다.

{ "executionId": "e8d5a28f-eb01-4f3c-9454-a30ba6dc54bc", "lifecycleStage": "PRE_SCALE_UP", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

POST_SCALE_UP

이 단계는 Amazon ECS가 그린 서비스 개정 태스크를 시작하고 태스크가 정상 상태인 이후에 발생합니다. 그린 태스크가 실행 중이지만 아직 트래픽을 수신하지 않습니다.

{ "executionId": "8b095b05-7bb0-4c56-a223-a3f61f4f9295", "lifecycleStage": "POST_SCALE_UP", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

TEST_TRAFFIC_SHIFT

이 단계는 Amazon ECS가 테스트 트래픽을 그린 서비스 개정으로 전환할 때 발생합니다. testTrafficWeights는 그린 개정이 테스트 트래픽의 100%를 수신하고 블루 개정이 0%를 수신하고 있음을 보여줍니다. 프로덕션 트래픽은 계속해서 블루 개정으로 흐릅니다.

{ "executionId": "779085de-ab47-42bc-84ad-41f9914a8643", "lifecycleStage": "TEST_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0 }, "productionTrafficWeights": {} } }

POST_TEST_TRAFFIC_SHIFT

이 단계는 Amazon ECS가 테스트 트래픽 전환을 완료한 후에 발생합니다. 그린 서비스 개정이 테스트 트래픽의 100%를 처리합니다.

{ "executionId": "3a0345ba-b029-404b-890d-7da2a4b266aa", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

PRODUCTION_TRAFFIC_SHIFT

이 단계는 Amazon ECS가 프로덕션 트래픽을 그린 서비스 개정으로 전환할 때 발생합니다. productionTrafficWeights는 그린 개정이 프로덕션 트래픽의 100%를 수신하고 블루 개정이 0%를 수신하고 있음을 보여줍니다.

{ "executionId": "f4fcae0f-9bec-41c6-ba87-0eaa0cef8af5", "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 100, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 0 } } }

POST_PRODUCTION_TRAFFIC_SHIFT

이 단계는 Amazon ECS가 프로덕션 트래픽 전환을 완료한 후에 발생합니다. 이제 그린 서비스 개정이 모든 프로덕션 트래픽을 처리합니다.

{ "executionId": "5f40ed04-7e54-437d-b95d-98bc872fec49", "lifecycleStage": "POST_PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": {} } }

롤백 중 수명 주기 후크

전용 ROLLBACK 수명 주기 단계는 없습니다. 롤백이 발생하면 Amazon ECS는 PRODUCTION_TRAFFIC_SHIFTTEST_TRAFFIC_SHIFT 단계(반복 간접 호출 단계)에 등록된 후크를 다시 간접적으로 호출합니다. 롤백 시 페이로드의 productionTrafficWeights는 블루 개정으로 다시 전환하는 트래픽을 보여줍니다.

트래픽이 원래 배포에서 다른 위치로 전환되더라도 여전히 원래 배포의 대상이므로 targetServiceRevisionArn은 그린 개정 ARN으로 유지됩니다.

다음 예제에서는 롤백 시 PRODUCTION_TRAFFIC_SHIFT 페이로드를 보여줍니다. 이제 블루 개정(1920498462936580504)은 프로덕션 트래픽의 100%를 수신하고 그린 개정(9313423515462893900)은 0%를 수신함을 알 수 있습니다.

{ "executionId": "70073435-cb99-457f-b900-6ee1dcad05ec", "lifecycleStage": "PRODUCTION_TRAFFIC_SHIFT", "resourceArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "executionDetails": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/9313423515462893900": 0, "arn:aws:ecs:us-west-2:123456789012:service-revision/my-cluster/my-service/1920498462936580504": 100 } } }

롤백 시 후크가 간접적으로 호출되고 있는지 확인하려면 productionTrafficWeights를 확인합니다. targetServiceRevisionArn(그린 개정)의 가중치가 0%이고 다른 개정의 가중치가 100%인 경우 배포가 롤백되는 것입니다.