Amazon Elastic Container Service 및 CodeDeploy 블루-그린 - AWS CodePipeline

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Elastic Container Service 및 CodeDeploy 블루-그린

블루/그린 배포를 사용하여 컨테이너 애플리케이션을 배포하는 파이프라인을 AWS CodePipeline에 구성할 수 있습니다. 블루/그린 배포에서는 트래픽을 다시 라우팅하기 전에 이전 버전과 함께 새 버전의 애플리케이션을 시작하고 새 버전을 테스트할 수 있습니다. 또한 배포 프로세스를 모니터링하고 문제가 발생할 경우 신속하게 롤백할 수 있습니다.

완료된 파이프라인은 이미지 또는 작업 정의 파일의 변경 사항을 감지하고 CodeDeploy를 사용하여 트래픽을 Amazon ECS 클러스터 및 로드 밸런서로 라우팅하고 배포합니다. CodeDeploy는 로드 밸런서에 새 리스너를 생성하여 특수 포트를 통해 새 작업을 대상으로 지정할 수 있습니다. Amazon ECS 작업 정의가 저장되는 CodeCommit 리포지토리와 같은 소스 위치를 사용하도록 파이프라인을 구성할 수도 있습니다.

파이프라인을 생성하기 전에 Amazon ECS 리소스, CodeDeploy 리소스, 로드 밸런서 및 대상 그룹을 이미 생성해야 합니다. 이미지 리포지토리에 이미 이미지에 태그를 지정하여 저장하고 작업 정의와 AppSpec 파일을 파일 리포지토리에 업로드했어야 합니다.

참고

이 주제에서는 CodePipeline인의 Amazon ECS에서 CodeDeploy로의 블루/그린 배포 작업에 대해 설명합니다. CodePipeline에서의 Amazon ECS 표준 배포 작업에 대한 참조 정보는 Amazon Elastic Container Service을 참조하세요.

작업 유형

  • 범주: Deploy

  • 소유자: AWS

  • 공급자: CodeDeployToECS

  • 버전 1

구성 파라미터

ApplicationName

필수 항목 여부: 예

CodeDeploy의 애플리케이션 이름. 파이프라인을 생성하기 전에 CodeDeploy에 애플리케이션이 이미 생성되어 있어야 합니다.

DeploymentGroupName

필수 항목 여부: 예

CodeDeploy 애플리케이션용으로 생성한 Amazon ECS 작업 세트에 대해 지정된 배포 그룹입니다. 파이프라인을 생성하기 전에 CodeDeploy에 배포 그룹이 이미 생성되어 있어야 합니다.

TaskDefinitionTemplateArtifact

필수 항목 여부: 예

배포 작업에 작업 정의 파일을 제공하는 입력 아티팩트의 이름입니다. 일반적으로 소스 작업의 출력 아티팩트 이름입니다. 콘솔을 사용하는 경우 소스 작업 출력 아티팩트의 기본 이름은 SourceArtifact입니다.

AppSpecTemplateArtifact

필수 항목 여부: 예

배포 작업에 AppSpec 파일을 제공하는 입력 아티팩트의 이름입니다. 파이프라인이 실행되면 이 값이 업데이트됩니다. 일반적으로 소스 작업의 출력 아티팩트 이름입니다. 콘솔을 사용하는 경우 소스 작업 출력 아티팩트의 기본 이름은 SourceArtifact입니다. AppSpec 파일에서 TaskDefinition의 경우 여기에 나온 것처럼 <TASK_DEFINITION> 자리표시자 텍스트를 유지할 수 있습니다.

AppSpecTemplatePath

필수 항목 여부: 아니요

파이프라인의 CodeCommit 리포지토리와 같은 파이프라인 소스 파일 위치에 저장된 AppSpec 파일의 파일 이름입니다. 기본적인 파일 이름은 appspec.yaml입니다. AppSpec 파일의 이름이 같고 파일 리포지토리의 루트 수준에 저장되어 있는 경우 파일 이름을 제공할 필요가 없습니다. 경로가 기본 경로가 아닌 경우 경로와 파일 이름을 입력합니다.

TaskDefinitionTemplatePath

필수 항목 여부: 아니요

파이프라인의 CodeCommit 리포지토리와 같은 파이프라인 파일 소스 위치에 저장된 작업 정의의 파일 이름입니다. 기본적인 파일 이름은 taskdef.json입니다. 작업 정의 파일의 이름이 같고 파일 리포지토리의 루트 수준에 저장되어 있는 경우 파일 이름을 제공할 필요가 없습니다. 경로가 기본 경로가 아닌 경우 경로와 파일 이름을 입력합니다.

Image<Number>ArtifactName

필수 항목 여부: 아니요

배포 작업에 이미지를 제공하는 입력 아티팩트의 이름입니다. 이는 일반적으로 이미지 리포지토리의 출력 아티팩트(예: Amazon ECR 소스 작업의 출력)입니다.

<Number>의 사용 가능한 값은 1~4입니다.

Image<Number>ContainerName

필수 항목 여부: 아니요

이미지 리포지토리(예: Amazon ECR 소스 리포지토리)에서 사용할 수 있는 이미지의 이름입니다.

<Number>의 사용 가능한 값은 1~4입니다.

입력 아티팩트

  • 아티팩트 수: 1 to 5

  • 설명: CodeDeployToECS 작업은 먼저 소스 파일 리포지토리에서 작업 정의 파일과 AppSpec 파일을 찾은 다음 이미지 리포지토리에서 이미지를 찾은 다음 동적으로 작업 정의의 새 버전을 생성하고 마지막으로 AppSpec 명령을 실행하여 작업 세트와 컨테이너를 클러스터에 배포합니다.

    CodeDeployToECS 작업은 이미지 URI를 이미지에 매핑하는 imageDetail.json 파일을 찾습니다. Amazon ECR 이미지 리포지토리에 변경을 커밋하면 파이프라인 ECR 소스 작업이 해당 커밋에 대한 imageDetail.json 파일을 생성합니다. 작업이 자동화되지 않은 파이프라인용 imageDetail.json 파일을 수동으로 추가할 수도 있습니다. imageDetail.json 파일에 대한 자세한 내용은 Amazon ECS 블루/그린 배포 작업을 위한 imageDetail.json 파일 단원을 참조하십시오.

    CodeDeployToECS 작업을 수행하면 작업 정의의 새 개정이 동적으로 생성됩니다. 이 단계에서 이 작업은 작업 정의 파일의 자리 표시자를 imageDetail.json 파일에서 검색된 이미지 URI로 바꿉니다. 예를 들어 IMAGE1_NAME을 Image1ContainerName 파라미터로 설정하는 경우 자리 표시자 <IMAGE1_NAME>을 작업 정의 파일의 이미지 필드 값으로 지정해야 합니다. 이 경우 CodeDeploytoECS 작업은 Image1ArtifactName으로 지정한 아티팩트의 imageDetail.json에서 검색된 실제 이미지 URI로 자리 표시자 <IMAGE1_NAME>을 대체합니다.

    작업 정의 업데이트의 경우 CodeDeploy AppSpec.yaml 파일에 TaskDefinition속성이 포함되어 있습니다.

    TaskDefinition: <TASK_DEFINITION>

    이 속성은 새 작업 정의가 생성된 후 CodeDeployToECS 작업에 의해 업데이트됩니다.

    TaskDefinition 필드 값의 경우 자리 표시자 텍스트는 <TASK_DEFINITION>이어야 합니다. CodeDeployToECS 작업은 이 자리 표시자를 동적으로 생성된 작업 정의의 실제 ARN으로 대체합니다.

출력 아티팩트

  • 아티팩트 수: 0

  • 설명: 이 작업 유형에는 출력 아티팩트가 적용되지 않습니다.

작업 선언

YAML
Name: Deploy Actions: - Name: Deploy ActionTypeId: Category: Deploy Owner: AWS Provider: CodeDeployToECS Version: '1' RunOrder: 1 Configuration: AppSpecTemplateArtifact: SourceArtifact ApplicationName: ecs-cd-application DeploymentGroupName: ecs-deployment-group Image1ArtifactName: MyImage Image1ContainerName: IMAGE1_NAME TaskDefinitionTemplatePath: taskdef.json AppSpecTemplatePath: appspec.yaml TaskDefinitionTemplateArtifact: SourceArtifact OutputArtifacts: [] InputArtifacts: - Name: SourceArtifact - Name: MyImage Region: us-west-2 Namespace: DeployVariables
JSON
{ "Name": "Deploy", "Actions": [ { "Name": "Deploy", "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeployToECS", "Version": "1" }, "RunOrder": 1, "Configuration": { "AppSpecTemplateArtifact": "SourceArtifact", "ApplicationName": "ecs-cd-application", "DeploymentGroupName": "ecs-deployment-group", "Image1ArtifactName": "MyImage", "Image1ContainerName": "IMAGE1_NAME", "TaskDefinitionTemplatePath": "taskdef.json", "AppSpecTemplatePath": "appspec.yaml", "TaskDefinitionTemplateArtifact": "SourceArtifact" }, "OutputArtifacts": [], "InputArtifacts": [ { "Name": "SourceArtifact" }, { "Name": "MyImage" } ], "Region": "us-west-2", "Namespace": "DeployVariables" } ] }

이 작업을 수행할 때 참조할 수 있는 관련 리소스는 다음과 같습니다.

  • 자습서: Amazon ECR 소스 및 ECS-to-CodeDeploy 배포를 사용하여 파이프라인 생성 – 이 자습서에서는 블루/그린 배포에 필요한 CodeDeploy 및 Amazon ECS 리소스를 생성하는 방법을 안내합니다. 이 자습서에서는 도커 이미지를 Amazon ECR로 푸시하고 도커 이미지 이름, 컨테이너 이름, Amazon ECS 서비스 이름 및 로드 밸런서 구성을 나열하는 Amazon ECS 작업 정의를 생성하는 방법을 보여줍니다. 그런 다음 자습서에서는 배포를 위한 AppSpec 파일 및 파이프라인을 생성하는 과정을 안내합니다.

    참고

    이 주제 및 자습서에서는 CodePipeline인의 CodeDeploy/ECS 블루/그린 작업에 대해 설명합니다. CodePipeline의 ECS 표준 작업에 대한 자세한 내용은 자습서: CodePipeline을 사용한 지속적 배포를 참조하십시오.

  • AWS CodeDeploy 사용 설명서 - 블루/그린 배포에서 로드 밸런서, 프로덕션 리스너, 대상 그룹 및 Amazon ECS 애플리케이션을 사용하는 방법에 대한 자세한 내용은 자습서: Amazon ECS 서비스 배포를 참조하십시오. AWS CodeDeploy 사용 설명서의 이 참조 정보는 Amazon ECS 및 AWS CodeDeploy를 사용한 블루/그린 배포에 대한 개요를 제공합니다.

  • Amazon Elastic Container Service 개발자 안내서 - 도커 이미지 및 컨테이너, ECS 서비스 및 클러스터, ECS 작업 세트 사용에 대한 자세한 내용은 Amazon ECS란 무엇입니까?를 참조하세요.