Amazon ECS 컴퓨팅 플랫폼의 배포 - AWS CodeDeploy

Amazon ECS 컴퓨팅 플랫폼의 배포

이 항목에서는 Amazon ECS 컴퓨팅 플랫폼을 사용하는 CodeDeploy 배포의 워크플로 및 구성 요소에 대해 설명합니다.

Amazon ECS 배포를 시작하기 전

Amazon ECS 애플리케이션 배포를 시작하기 전에 다음을 준비해야 합니다. 일부 요구 사항은 배포 그룹을 만들 때 지정되고, 일부는 AppSpec 파일에 지정됩니다.

요구 사항 지정되는 위치
Amazon ECS 클러스터 배포 그룹
Amazon ECS 서비스 배포 그룹
Application Load Balancer 또는 Network Load Balancer 배포 그룹
프로덕션 리스너 배포 그룹
테스트 리스너(선택 사항) 배포 그룹
대상 그룹 두 개 배포 그룹
Amazon ECS 작업 정의 AppSpec 파일
컨테이너 이름 AppSpec 파일
컨테이너 포트 AppSpec 파일
Amazon ECS 클러스터

Amazon ECS cluster는 작업 또는 서비스의 논리적 그룹입니다. CodeDeploy 애플리케이션의 배포 그룹을 만들 때 Amazon ECS 서비스가 포함된 Amazon ECS 클러스터를 지정합니다. 자세한 내용은 Amazon Elastic Container Service 사용 설명서Amazon ECS 클러스터를 참조하세요.

Amazon ECS 서비스

Amazon ECS 서비스는 Amazon ECS 클러스터에서 지정된 작업 정의 인스턴스를 유지하고 실행합니다. Amazon ECS 서비스는 CodeDeploy에서 활성화되어 있어야 합니다. 기본적으로 Amazon ECS 서비스는 Amazon ECS 배포에 대해 활성화됩니다. 배포 그룹을 만들 때 Amazon ECS 클러스터에 있는 Amazon ECS 서비스를 배포하도록 선택합니다. 자세한 내용은 Amazon Elastic Container Service 사용 설명서Amazon ECS 서비스를 참조하세요.

Application Load Balancer 또는 Network Load Balancer

Amazon ECS 배포로 업데이트하려는 Amazon ECS 서비스에서 Elastic Load Balancing을 사용해야 합니다. Application Load Balancer 또는 Network Load Balancer를 사용할 수 있습니다. 동적 포트 매핑 및 경로 기반 라우팅과 우선 순위 규칙 등의 기능을 활용할 수 있도록 Application Load Balancer를 사용하는 것이 좋습니다. CodeDeploy 애플리케이션의 배포 그룹을 만들 때 로드 밸런서를 지정합니다. 자세한 내용은 CodeDeploy Amazon ECS 배포를 위한 로드 밸런서, 대상 그룹 및 리스너 설정Amazon Elastic Container Service 사용 설명서로드 밸런서 생성을 참조하세요.

리스너 한 개 또는 두 개

리스너는 로드 밸런서가 대상 그룹으로 트래픽을 보내기 위해 사용합니다. 프로덕션 리스너 한 개는 필수입니다. 확인 테스트를 실행하는 동안 대체 작업 세트로 트래픽을 보내는 두 번째 테스트 리스너(선택 사항)를 지정할 수 있습니다. 배포 그룹을 만들 때 리스너를 한 개 또는 두 개 지정합니다. Amazon ECS 콘솔을 사용하여 Amazon ECS 서비스를 만들 경우 리스너가 자동으로 생성됩니다. 자세한 내용은 Elastic Load Balancing 사용 설명서에서 애플리케이션 로드 밸런서의 리스너Amazon Elastic Container Service 사용 설명서서비스 생성을 참조하세요.

두 개의 Amazon ECS 대상 그룹

대상 그룹은 등록된 대상으로 트래픽을 라우팅하는 데 사용됩니다. Amazon ECS 배포에는 대상 그룹이 두 개 필요합니다. 하나는 Amazon ECS 애플리케이션의 원래 작업 세트용이고 다른 하나는 대체 작업 세트용입니다. 배포 중에 CodeDeploy는 대체 작업 세트를 만들고 원래 작업 세트에서 새 작업 세트로 트래픽을 다시 라우팅합니다. CodeDeploy 애플리케이션의 배포 그룹을 만들 때 대상 그룹을 지정합니다.

배포 중에 CodeDeploy는 상태가 PRIMARY 인 Amazon ECS 서비스의 작업 세트(원래 작업 세트)와 연결된 대상 그룹을 확인하고 대상 그룹 하나를 이 작업 세트와 연결한 후 다른 대상 그룹을 대체 작업 세트와 연결합니다. 다른 배포를 수행하는 경우, 현재 배포의 원래 작업 세트와 연결된 대상 그룹은 다음 배포의 대체 작업 세트와 연결됩니다. 자세한 내용은 Elastic Load Balancing 사용 설명서애플리케이션 로드 밸런서의 대상 그룹을 참조하세요.

Amazon ECS 작업 정의

작업 정의는 Amazon ECS 애플리케이션이 포함된 도커 컨테이너를 실행하는 데 필요합니다. CodeDeploy 애플리케이션의 AppSpec 파일에서 작업 정의의 ARN을 지정합니다. 자세한 내용은 Amazon Elastic Container Service 사용 설명서 Amazon ECS 배포를 위한 AppSpec 'resources' 섹션 Amazon ECS 작업 정의를 참조하세요.

Amazon ECS 애플리케이션의 컨테이너

Docker 컨테이너란 애플리케이션이 실행될 수 있도록 코드와 해당 종속성을 패키징하는 소프트웨어 단위를 말합니다. 컨테이너는 애플리케이션을 격리하므로 애플리케이션이 다른 컴퓨팅 환경에서도 실행됩니다. 로드 밸런서는 Amazon ECS 애플리케이션 작업 세트의 컨테이너로 트래픽을 보냅니다. CodeDeploy 애플리케이션의 AppSpec 파일에서 컨테이너의 이름을 지정합니다. AppSpec 파일에 지정된 컨테이너는 Amazon ECS 작업 정의에 지정된 컨테이너 중 하나여야 합니다. 자세한 내용은 Amazon Elastic Container Service 사용 설명서Amazon Elastic Container Service란 무엇인가? Amazon ECS 배포를 위한 AppSpec 'resources' 섹션 을(를) 참조하세요.

대체 작업 세트의 포트

Amazon ECS 배포 중에 로드 밸런서가 CodeDeploy 애플리케이션의 AppSpec 파일에 지정된 이 포트로 트래픽을 보냅니다. CodeDeploy 애플리케이션의 AppSpec 파일에서 포트의 이름을 지정합니다. 자세한 내용은 Amazon ECS 배포를 위한 AppSpec 'resources' 섹션 섹션을 참조하세요.

Amazon ECS 컴퓨팅 플랫폼의 배포 구성 요소

다음 다이어그램은 Amazon ECS 컴퓨팅 플랫폼에서의 CodeDeploy 배포 구성 요소를 보여줍니다.

Amazon ECS 컴퓨팅 플랫폼의 배포 워크플로(높은 수준)

다음 다이어그램은 업데이트된 Amazon ECS 서비스 배포의 기본 단계를 보여줍니다.

이러한 단계는 다음과 같습니다.

  1. 배포하려는 항목을 고유하게 나타내는 이름을 지정하여 AWS CodeDeploy 애플리케이션을 만듭니다. Amazon ECS 애플리케이션을 배포하려면 AWS CodeDeploy 애플리케이션에서 Amazon ECS 컴퓨팅 플랫폼을 선택합니다. CodeDeploy는 배포 중에 애플리케이션을 사용하여 배포 그룹, 대상 그룹, 리스너, 트래픽 다시 라우팅 동작, 애플리케이션 개정 등의 올바른 배포 구성 요소를 참조합니다. 자세한 내용은 CodeDeploy를 사용하여 애플리케이션 생성 섹션을 참조하세요.

  2. 다음을 지정하여 배포 그룹을 설정합니다.

    • 배포 그룹 이름.

    • Amazon ECS 클러스터와 서비스 이름. Amazon ECS 서비스의 배포 컨트롤러는 CodeDeploy로 설정되어야 합니다.

    • 배포 중에 사용되는 프로덕션 리스너, 테스트 리스너(선택 사항), 대상 그룹

    • 배포 설정(예: Amazon ECS 서비스의 대체 Amazon ECS 작업 세트로 프로덕션 트래픽을 다시 라우팅할 시기 및 Amazon ECS 서비스의 원래 Amazon ECS 작업 세트를 종료할 시기)

    • 설정(선택 사항) (예: 트리거, 경보, 롤백 동작)

  3. 애플리케이션 사양 파일(AppSpec 파일)을 지정합니다. 파일을 Amazon S3에 업로드하거나, 콘솔에 YAML 또는 JSON 형식으로 입력하거나, AWS CLI 또는 SDK로 지정할 수 있습니다. AppSpec 파일은 배포에 사용되는 Amazon ECS 작업 정의, 트래픽을 라우팅하는 데 사용되는 포트 매핑과 컨테이너 이름, 배포 수명 주기 후크 후 실행되는 Lambda 함수를 지정합니다. 컨테이너 이름은 Amazon ECS 작업 정의의 컨테이너여야 합니다. 자세한 내용은 CodeDeploy의 애플리케이션 개정 작업 섹션을 참조하세요.

  4. 애플리케이션 개정을 배포합니다. AWS CodeDeploy은(는) Amazon ECS 서비스의 원래 작업 세트 버전에서 새로운 대체 작업 세트로 트래픽을 다시 라우팅합니다. 배포 그룹에 지정된 대상 그룹은 원래 및 대체 작업 세트에 트래픽을 제공하는 데 사용됩니다. 배포가 완료되면 원래 작업 세트가 종료됩니다. 트래픽을 다시 라우팅하기 전에 테스트 리스너(선택 사항)를 지정하여 대체 버전에 테스트 트래픽을 제공할 수 있습니다. 자세한 내용은 CodeDeploy에서 배포 만들기 섹션을 참조하세요.

  5. 배포 결과를 확인합니다. 자세한 내용은 CodeDeploy에서 배포 모니터링 섹션을 참조하세요.

Amazon ECS 배포 중에 발생하는 일

테스트 리스너를 사용해 Amazon ECS 배포를 시작하려면 먼저 구성 요소를 구성해야 합니다. 자세한 내용은 Amazon ECS 배포를 시작하기 전 섹션을 참조하세요.

다음 다이어그램은 Amazon ECS 배포를 시작할 준비를 마쳤을 때 구성 요소의 관계를 나타낸 것입니다.

배포가 시작되면 배포 수명 주기 이벤트가 한 번에 하나씩 실행되기 시작합니다. 일부 수명 주기 이벤트는 AppSpec 파일에서 지정된 Lambda 함수만 실행하는 후크입니다. 다음 표의 배포 수명 주기 이벤트는 실행 순서대로 나열되어 있습니다. 자세한 내용은 Amazon ECS 배포를 위한 AppSpec 'hooks' 섹션 섹션을 참조하세요.

수명 주기 이벤트 수명 주기 이벤트 작업
BeforeInstall(Lambda 함수 후크) Lambda 함수 실행
Install 대체 작업 세트를 설정합니다.
AfterInstall(Lambda 함수 후크) Lambda 함수 실행
AllowTestTraffic 트래픽을 테스트 리스너에서 대상 그룹 2로 라우팅합니다.
AfterAllowTestTraffic(Lambda 함수 후크) Lambda 함수 실행
BeforeAllowTraffic(Lambda 함수 후크) Lambda 함수 실행
AllowTraffic 트래픽을 프로덕션 리스너에서 대상 그룹 2로 라우팅합니다.
AfterAllowTraffic Lambda 함수 실행

참고

후크의 Lambda 함수는 선택 사항입니다.

  1. AppSpec 파일의 BeforeInstall 후크에서 지정한 Lambda 함수를 실행합니다.

  2. Install 수명 주기 이벤트 도중:

    1. 대체 작업 세트가 Amazon ECS 서비스에 생성됩니다.

    2. 업데이트된 컨테이너화 애플리케이션이 대체 작업 세트에 설치됩니다.

    3. 두 번째 대상 그룹이 대체 작업 세트와 연결됩니다.

    아래 다이어그램은 새로운 대체 작업 세트와 함께 배포 구성 요소를 나타낸 것입니다. 컨테이너화 애플리케이션은 이 작업 세트에 설치되어 있습니다. 작업 세트는 세 가지 작업으로 구성됩니다. 애플리케이션의 작업 수는 무제한입니다. 이제 두 번째 대상 그룹이 대체 작업 세트와 연결됩니다.

  3. AppSpec 파일의 AfterInstall 후크에서 지정한 Lambda 함수를 실행합니다.

  4. AllowTestTraffic 이벤트가 호출됩니다. 수명 주기 이벤트 과정에서 테스트 리스너가 트래픽을 업데이트된 컨테이너화 애플리케이션으로 라우팅합니다.

  5. AppSpec 파일의 AfterAllowTestTraffic 후크에서 지정한 Lambda 함수를 실행합니다. Lambda 함수는 테스트 트래픽을 사용하여 배포를 검증할 수 있습니다. 예를 들어 Lambda 함수는 트래픽을 테스트 리스너까지 전송한 후 대체 작업 세트에서 지표를 추적할 수 있습니다. 롤백이 구성된 경우에는 Lambda 함수에서 검증 테스트에 실패할 경우 롤백을 트리거하는 CloudWatch 경보를 구성할 수 있습니다.

    검증 테스트가 완료되면 다음 중 한 가지가 발생합니다.

    • 검증에 실패하고 롤백이 구성된 경우 배포 상태가 Failed로 표시되고 구성 요소는 배포가 시작되었던 상태로 돌아갑니다.

    • 검증에 실패하였지만 롤백이 구성되어 있지 않다면 배포 상태가 Failed로 표시되고 구성 요소는 현재 상태를 유지합니다.

    • 검증에 성공한 경우에는 배포가 BeforeAllowTraffic 후크까지 이어집니다.

    자세한 내용은 CodeDeploy에서 CloudWatch 경보를 사용하여 배포 모니터링, 자동 롤백, 배포 그룹에 대한 고급 옵션 구성 단원을 참조하세요.

  6. AppSpec 파일의 BeforeAllowTraffic 후크에서 지정한 Lambda 함수를 실행합니다.

  7. AllowTraffic 이벤트가 호출됩니다. 프로덕션 트래픽이 원래 작업 세트에서 대체 작업 세트로 다시 라우팅됩니다. 다음 다이어그램은 프로덕션 트래픽을 수신하는 대체 작업 세트를 나타낸 것입니다.

  8. AppSpec 파일의 AfterAllowTraffic 후크에서 지정한 Lambda 함수를 실행합니다.

  9. 모든 이벤트에 성공하면 배포 상태가 Succeeded로 설정되고 원래 작업 세트는 제거됩니다.

애플리케이션 개정 버전 업로드

AppSpec 파일을 Amazon S3에 배치하거나, 콘솔 또는 AWS CLI에서 직접 입력합니다. 자세한 내용은 Application Specification Files 섹션을 참조하세요.

애플리케이션 및 배포 그룹 만들기

Amazon ECS 컴퓨팅 플랫폼의 CodeDeploy 배포 그룹은 배포 중에 사용되는 두 대상 그룹과 업데이트된 Amazon ECS 애플리케이션에 트래픽을 제공하는 리스너를 식별합니다. 배포 그룹은 또한 일련의 구성 옵션(경보 및 롤백 구성 등) 세트를 정의합니다.

애플리케이션 개정 버전 배포

이제 배포 그룹에 지정된 업데이트된 Amazon ECS 서비스를 배포할 준비가 되었습니다. CodeDeploy 콘솔 또는 create-deployment 명령을 사용할 수 있습니다. 개정 및 배포 그룹을 비롯하여 배포를 제어하기 위해 지정할 수 있는 파라미터가 있습니다.

애플리케이션 업데이트

애플리케이션을 업데이트한 다음 CodeDeploy 콘솔을 사용하거나 create-deployment 명령을 호출하여 개정 버전을 푸시할 수 있습니다.

중지 및 실패한 배포

CodeDeploy 콘솔 또는 stop-deployment 명령을 사용하여 배포를 중지할 수 있습니다. 배포를 중지하려고 하면 다음 3가지 동작 중 하나가 발생합니다.

  • 배포가 중지되고 성공 상태가 반환됩니다. 이 경우 중지된 배포의 배포 그룹에서 더 이상 배포 수명 주기 이벤트가 실행되지 않습니다.

  • 배포가 즉시 중지되지 않고, 대기 중 상태가 반환됩니다. 이 경우, 일부 배포 수명 주기 이벤트는 배포 그룹에서 계속 실행 중일 수 있습니다. 대기 중인 작업이 완료되면 배포 중지를 위한 후속 호출에서 성공 상태를 반환합니다.

  • 배포를 중지할 수 없고 오류가 반환됩니다. 자세한 내용은 오류 정보 및 AWS CodeDeploy API 참조의 일반적인 오류를 참조하세요.

다시 배포 및 배포 롤백

CodeDeploy는 대체 작업 세트에서 원래 작업 세트로 트래픽을 다시 라우팅하여 롤백을 구현합니다.

배포에 실패한 경우 또는 경보 모니터링 임계값에 도달한 경우 등 특정 조건이 충족되면 배포를 자동으로 롤백하도록 배포 그룹을 구성할 수 있습니다. 또한 개별 배포에서 배포 그룹에 대해 지정한 롤백 설정을 재정의할 수도 있습니다.

뿐만 아니라 이전에 배포한 개정을 수동으로 다시 배포하여 실패한 배포를 롤백하도록 선택할 수도 있습니다.

어느 경우에도 새 배포나 롤백 배포에 고유의 배포 ID가 할당됩니다. CodeDeploy 콘솔에 자동 배포의 결과인 배포 목록이 표시됩니다.

다시 배포하는 경우 현재 배포의 원래 작업 세트와 연결된 대상 그룹은 재배포의 대체 작업 세트와 연결됩니다.

자세한 내용은 CodeDeploy를 사용하여 재배포 및 배포 롤백 섹션을 참조하세요.

AWS CloudFormation을(를) 통한 Amazon ECS 블루/그린 배포

AWS CloudFormation을(를) 사용하여 CodeDeploy를 통한 Amazon ECS 블루/그린 배포를 수행할 수 있습니다. 자세한 내용은 AWS CloudFormation을(를) 통해 Amazon ECS 블루/그린 배포 생성 섹션을 참조하세요.

참고

AWS CloudFormation을(를) 통한 Amazon ECS 블루/그린 배포 관리는 아시아 태평양(오사카) 리전에서 사용할 수 없습니다.