

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

# Amazon Elastic Container Service(Amazon ECS) 및 CodeDeploy 블루-그린 배포 작업 참조
<a name="action-reference-ECSbluegreen"></a>

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

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

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

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

**Topics**
+ [작업 유형](#action-reference-ECSbluegreen-type)
+ [구성 파라미터](#action-reference-ECSbluegreen-config)
+ [입력 아티팩트](#action-reference-ECSbluegreen-input)
+ [출력 아티팩트](#action-reference-ECSbluegreen-output)
+ [서비스 역할 권한: `CodeDeployToECS` 작업](#edit-role-codedeploy-ecs)
+ [작업 선언](#action-reference-ECSbluegreen-example)
+ [다음 사항도 참조하세요.](#action-reference-ECSbluegreen-links)

## 작업 유형
<a name="action-reference-ECSbluegreen-type"></a>
+ 범주: `Deploy`
+ 소유자: `AWS`
+ 공급자: `CodeDeployToECS`
+ 버전: `1`

## 구성 파라미터
<a name="action-reference-ECSbluegreen-config"></a>

**ApplicationName**  
필수 항목 여부: 예  
CodeDeploy의 애플리케이션 이름. 파이프라인을 생성하기 전에 CodeDeploy에 애플리케이션이 이미 생성되어 있어야 합니다.

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

**TaskDefinitionTemplateArtifact**  
필수 항목 여부: 예  
배포 작업에 작업 정의 파일을 제공하는 입력 아티팩트의 이름입니다. 일반적으로 소스 작업의 출력 아티팩트 이름입니다. 콘솔을 사용하는 경우 소스 작업 출력 아티팩트의 기본 이름은 `SourceArtifact`입니다.

**AppSpecTemplateArtifact**  
필수 항목 여부: 예  
배포 작업에 AppSpec 파일을 제공하는 입력 아티팩트의 이름입니다. 파이프라인이 실행되면 이 값이 업데이트됩니다. 일반적으로 소스 작업의 출력 아티팩트 이름입니다. 콘솔을 사용하는 경우 소스 작업 출력 아티팩트의 기본 이름은 `SourceArtifact`입니다. AppSpec 파일에서 `TaskDefinition`의 경우 [여기](tutorials-ecs-ecr-codedeploy.md#tutorials-ecs-ecr-codedeploy-taskdefinition)에 나온 것처럼 `<TASK_DEFINITION>` 자리표시자 텍스트를 유지할 수 있습니다.

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

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

**Image<Number>ArtifactName**  
필수 여부: 아니요  
배포 작업에 이미지를 제공하는 입력 아티팩트의 이름입니다. 이는 일반적으로 이미지 리포지토리의 출력 아티팩트(예: Amazon ECR 소스 작업의 출력)입니다.  
`<Number>`의 사용 가능한 값은 1\$14입니다.

**Image<Number>ContainerName**  
필수 여부: 아니요  
이미지 리포지토리(예: Amazon ECR 소스 리포지토리)에서 사용할 수 있는 이미지의 이름입니다.  
`<Number>`의 사용 가능한 값은 1\$14입니다.

## 입력 아티팩트
<a name="action-reference-ECSbluegreen-input"></a>
+ **아티팩트 수:** `1 to 5`
+ **설명:** `CodeDeployToECS` 작업은 먼저 소스 파일 리포지토리에서 작업 정의 파일과 AppSpec 파일을 찾은 다음 이미지 리포지토리에서 이미지를 찾은 다음 동적으로 작업 정의의 새 버전을 생성하고 마지막으로 AppSpec 명령을 실행하여 작업 세트와 컨테이너를 클러스터에 배포합니다.

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

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

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

  ```
  TaskDefinition: <TASK_DEFINITION>
  ```

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

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

## 출력 아티팩트
<a name="action-reference-ECSbluegreen-output"></a>
+ **아티팩트 수:** `0` 
+ **설명:** 이 작업 유형에는 출력 아티팩트가 적용되지 않습니다.

## 서비스 역할 권한: `CodeDeployToECS` 작업
<a name="edit-role-codedeploy-ecs"></a>

`CodeDeployToECS` 작업(블루/그린 배포)의 경우, CodeDeploy를 사용하여 Amazon ECS 블루/그린 배포 작업을 위한 파이프라인을 만드는 데 필요한 최소 권한은 다음과 같습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCodeDeployDeploymentActions",
            "Action": [
                "codedeploy:CreateDeployment",
                "codedeploy:GetDeployment"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:111122223333:deploymentgroup:[[ApplicationName]]/*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowCodeDeployApplicationActions",
            "Action": [
                "codedeploy:GetApplication",
                "codedeploy:GetApplicationRevision",
                "codedeploy:RegisterApplicationRevision"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:111122223333:application:[[ApplicationName]]",
                "arn:aws:codedeploy:*:111122223333:application:[[ApplicationName]]/*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowCodeDeployDeploymentConfigAccess",
            "Action": [
                "codedeploy:GetDeploymentConfig"
            ],
            "Resource": [
                "arn:aws:codedeploy:*:111122223333:deploymentconfig:*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowECSRegisterTaskDefinition",
            "Action": [
                "ecs:RegisterTaskDefinition"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "AllowPassRoleToECS",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::111122223333:role/[[PassRoles]]"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "ecs.amazonaws.com",
                        "ecs-tasks.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

Amazon ECS에서 태그 지정 권한 부여 사용으로 옵트인할 수 있습니다. 옵트인을 통해 다음 권한: `ecs:TagResource`를 부여해야 합니다. 옵트인하는 방법과 권한 필요 여부 및 태그 권한 부여 적용 여부에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서의 [태그 지정 권한 부여 타임라인](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#tag-resources-timeline)을 참조하세요.

또한 작업에 IAM 역할을 사용하려면 `iam:PassRole` 권한을 추가해야 합니다. 자세한 내용은 [Amazon ECS 태스크 실행 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)과 [태스크에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.

위 예제와 같이 `iam:PassedToService` 조건에 따라 서비스 목록에 `ecs-tasks.amazonaws.com`을 추가할 수도 있습니다.

## 작업 선언
<a name="action-reference-ECSbluegreen-example"></a>

------
#### [ 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"
        }
    ]
}
```

------

## 다음 사항도 참조하세요.
<a name="action-reference-ECSbluegreen-links"></a>

이 작업을 수행할 때 참조할 수 있는 관련 리소스는 다음과 같습니다.
+ [자습서: Amazon ECR 소스 및 ECS-to-CodeDeploy 배포를 사용하여 파이프라인 생성](tutorials-ecs-ecr-codedeploy.md) – 이 자습서에서는 블루/그린 배포에 필요한 CodeDeploy 및 Amazon ECS 리소스를 생성하는 방법을 안내합니다. 이 자습서에서는 도커 이미지를 Amazon ECR로 푸시하고 도커 이미지 이름, 컨테이너 이름, Amazon ECS 서비스 이름 및 로드 밸런서 구성을 나열하는 Amazon ECS 작업 정의를 생성하는 방법을 보여줍니다. 그런 다음 자습서에서는 배포를 위한 AppSpec 파일 및 파이프라인을 생성하는 과정을 안내합니다.
**참고**  
이 주제 및 자습서에서는 CodePipeline인의 CodeDeploy/ECS 블루/그린 작업에 대해 설명합니다. CodePipeline의 ECS 표준 작업에 대한 자세한 내용은 [자습서: CodePipeline을 사용한 지속적 배포](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cd-pipeline.html)를 참조하세요.
+ *AWS CodeDeploy 사용 설명서* - 블루/그린 배포에서 로드 밸런서, 프로덕션 리스너, 대상 그룹 및 Amazon ECS 애플리케이션을 사용하는 방법에 대한 자세한 내용은 [자습서: Amazon ECS 서비스 배포를](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment.html) 참조하세요. *AWS CodeDeploy 사용 설명서*의이 참조 정보는 Amazon ECS 및를 사용한 블루/그린 배포에 대한 개요를 제공합니다 AWS CodeDeploy.
+ *Amazon Elastic Container Service 개발자 안내서* - 도커 이미지 및 컨테이너, ECS 서비스 및 클러스터, ECS 작업 세트 사용에 대한 자세한 내용은 [Amazon ECS란 무엇입니까?](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/)를 참조하세요.