

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

# 튜토리얼: Amazon ECS에 애플리케이션 배포
<a name="tutorial-ecs-deployment"></a>

 이 튜토리얼에서는 CodeDeploy를 사용하여 Amazon ECS에 애플리케이션을 배포하는 방법을 알아봅니다. 이미 만들고 Amazon ECS에 배포한 애플리케이션으로 시작합니다. 첫 번째 단계는 새 태그로 작업 정의 파일을 수정하여 애플리케이션을 업데이트하는 것입니다. 다음에는 CodeDeploy를 사용하여 업데이트를 배포합니다. 배포 중에 CodeDeploy는 새로운 대체 작업 세트에 업데이트를 설치합니다. 그런 다음, 원래 작업 세트에 있는 Amazon ECS 애플리케이션의 원래 버전에서 대체 작업 세트에 있는 업데이트된 버전으로 프로덕션 트래픽을 이동합니다.

 Amazon ECS 배포 중에 CodeDeploy는 대상 그룹 두 개와 프로덕션 트래픽 리스너 하나로 구성된 로드 밸런서를 사용합니다. 다음 다이어그램에서는 배포가 시작되기 전에 로드 밸런서, 프로덕션 리스너, 대상 그룹 및 Amazon ECS 애플리케이션이 관련되는 방식을 보여 줍니다. 이 튜토리얼에서는 Application Load Balancer를 사용합니다. Network Load Balancer를 사용할 수도 있습니다.

![\[Application Load Balancer 또는 Network Load Balancer, 프로덕션 리스너 1개, 대상 그룹 2개, 태스크 세트 1개, Amazon ECS 서비스 1개입니다.\]](http://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-1.png)


 성공적인 배포 후, 프로덕션 트래픽 리스너는 새로운 대체 작업 세트에 트래픽을 제공하고 원래 작업 세트는 종료됩니다. 다음 다이어그램에서는 성공적인 배포 후에 리소스가 관련되는 방식을 보여 줍니다. 자세한 내용은 [Amazon ECS 배포 중에 발생하는 일](deployment-steps-ecs.md#deployment-steps-what-happens) 단원을 참조하십시오.

![\[Application Load Balancer 또는 Network Load Balancer, 프로덕션 리스너 1개, 대상 그룹 2개, 대체 태스크 세트 1개입니다.\]](http://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-5.png)


를 사용하여 Amazon ECS에 애플리케이션을 AWS CLI 배포하는 방법에 대한 자세한 내용은 [ 자습서: 블루/그린 배포를 사용하여 서비스 생성을](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html) 참조하세요. CodePipeline을 사용하여 CodeDeploy가 있는 Amazon ECS 서비스에 대한 변경 사항을 감지하고 자동으로 배포하는 방법에 대한 자세한 내용은 [튜토리얼: Amazon ECR 소스 및 ECS-to-CodeDeploy 배포를 사용하여 파이프라인 생성](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html)을 참조하세요.

이 자습서를 완료한 후에는 [튜토리얼: Amazon ECS 서비스 배포 및 확인 테스트](tutorial-ecs-deployment-with-hooks.md)에서 CodeDeploy 애플리케이션과 생성한 배포 그룹을 사용하여 배포 확인 테스트를 추가할 수 있습니다.

**Topics**
+ [사전 조건](tutorial-ecs-prereqs.md)
+ [1단계: Amazon ECS 애플리케이션 업데이트](tutorial-ecs-update-the-ecs-application.md)
+ [2단계: AppSpec 파일 생성](tutorial-ecs-create-appspec-file.md)
+ [3단계: CodeDeploy 콘솔을 사용하여 애플리케이션 배포](tutorial-ecs-deployment-deploy.md)
+ [4단계: 정리](tutorial-ecs-clean-up.md)

# 사전 조건
<a name="tutorial-ecs-prereqs"></a>

이 자습서를 완료하려면 먼저 다음을 수행해야 합니다.
+  [CodeDeploy 시작하기](getting-started-codedeploy.md)의 2단계와 3단계를 완료합니다.
+  대상 그룹 두 개와 리스너 하나로 구성된 Application Load Balancer를 생성합니다. 콘솔을 사용하여 로드 밸런서를 생성하는 방법에 대한 자세한 내용은 [CodeDeploy Amazon ECS 배포를 위한 로드 밸런서, 대상 그룹 및 리스너 설정](deployment-groups-create-load-balancer-for-ecs.md) 단원을 참조하세요. 를 사용하여 로드 밸런서를 생성하는 방법에 대한 자세한 내용은 *Amazon Elastic Container Service 사용 설명서*의 [1단계: Application Load Balancer 생성을](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html#create-blue-green-loadbalancer) AWS CLI참조하세요. 로드 밸런서를 생성할 때 이 자습서를 위해 다음을 기록해 둡니다.
  +  로드 밸런서의 이름입니다.
  +  대상 그룹의 이름입니다.
  +  로드 밸런서의 리스너에서 사용되는 포트입니다.
+  Amazon ECS 클러스터 및 서비스를 생성합니다. 자세한 내용은 *Amazon Elastic Container Service 사용 설명서*에서 [튜토리얼: 블루/그린 배포를 사용하여 서비스 생성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html)의 2단계, 3단계, 4단계를 참조하세요. 이 자습서를 위해 다음을 기록해 둡니다.
  +  Amazon ECS 클러스터의 이름입니다.
  +  Amazon ECS 서비스에 사용되는 작업 정의의 ARN입니다.
  +  Amazon ECS 서비스에 사용되는 컨테이너의 이름입니다.
+  AppSpec 파일용 Amazon S3 버킷을 만듭니다.

# 1단계: Amazon ECS 애플리케이션 업데이트
<a name="tutorial-ecs-update-the-ecs-application"></a>

 이 단원에서는 해당 작업 정의의 새 버전을 사용하여 Amazon ECS 애플리케이션을 업데이트합니다. 업데이트된 수정은 새로운 키 및 태그 페어를 추가합니다. [3단계: CodeDeploy 콘솔을 사용하여 애플리케이션 배포](tutorial-ecs-deployment-deploy.md)에서는 Amazon ECS 애플리케이션의 업데이트된 버전을 배포합니다.

**작업 정의를 업데이트하려면**

1. [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)에서 콘솔을 엽니다.

1.  탐색 창에서 **태스크 정의**를 선택합니다.

1. Amazon ECS 서비스에 사용되는 태스크 정의를 선택합니다.

1. 태스크 정의 개정을 선택한 다음 **새 개정 생성**, **새 개정 생성**을 선택합니다.

1.  이 자습서를 위해 태그를 추가하여 작업 정의에 대한 작은 업데이트를 수행합니다. 페이지 하단의 **태그**에서 새 키 및 값 페어를 입력하여 새 태그를 만듭니다.

1.  **생성(Create)**을 선택합니다.

   태스크 정의의 개정 번호가 하나 증가됩니다.

1.  **JSON** 탭을 선택합니다. 다음 단계에서 이 정보가 필요하므로 다음 사항을 기록해 둡니다.
   +  `taskDefinitionArn`의 값입니다. 형식은 `arn:aws:ecs:aws-region:account-id:task-definition/task-definition-family:task-definition-revision`입니다. 이 항목은 업데이트된 작업 정의의 ARN입니다.
   +  `containerDefinitions` 요소에서 `name`의 값입니다. 이 항목은 컨테이너의 이름입니다.
   +  `portMappings` 요소에서 `containerPort`의 값입니다. 이 항목은 컨테이너의 포트입니다.

# 2단계: AppSpec 파일 생성
<a name="tutorial-ecs-create-appspec-file"></a>

 이 단원에서는 AppSpec 파일을 생성하고 [사전 조건](tutorial-ecs-prereqs.md) 섹션에서 생성한 Amazon S3 버킷에 업로드합니다. Amazon ECS 배포를 위한 AppSpec 파일은 작업 정의, 컨테이너 이름 및 컨테이너 포트를 지정합니다. 자세한 내용은 [Amazon ECS 배포용 AppSpec 파일 예제](reference-appspec-file-example.md#appspec-file-example-ecs) 및 [Amazon ECS 배포를 위한 AppSpec 'resources' 섹션](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs) 단원을 참조하세요.

**AppSpec 파일을 생성하려면**

1.  YAML을 사용하여 AppSpec 파일을 생성하려는 경우 `appspec.yml`(이)라는 파일을 만듭니다. JSON을 사용하여 AppSpec 파일을 생성하려는 경우 `appspec.json`(이)라는 파일을 만듭니다.

1.  AppSpec 파일에 YAML을 사용하는지 또는 JSON을 사용하는지에 따라 적절한 탭을 선택하고, 해당 내용을 방금 생성한 AppSpec 파일로 복사합니다. `TaskDefinition` 속성에는 [1단계: Amazon ECS 애플리케이션 업데이트](tutorial-ecs-update-the-ecs-application.md) 단원에서 기록한 작업 정의 ARN을 사용합니다.

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

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "your-container-name",
               "ContainerPort": your-container-port
             }
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "your-container-name"
             ContainerPort: your-container-port
   ```

------
**참고**  
 대체 작업 세트는 원래 작업 세트로부터 서브넷, 보안 그룹, 플랫폼 버전 및 할당된 퍼블릭 IP 값을 상속합니다. AppSpec 파일에서 선택적 속성을 설정하여 대체 작업 세트에 대한 이러한 값을 재정의할 수 있습니다. 자세한 내용은 [Amazon ECS 배포를 위한 AppSpec 'resources' 섹션](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs) 및 [Amazon ECS 배포용 AppSpec 파일 예제](reference-appspec-file-example.md#appspec-file-example-ecs) 단원을 참조하세요.

1.  AppSpec 파일을 이 튜토리얼의 사전 조건으로 생성한 S3 버킷에 업로드합니다.

# 3단계: CodeDeploy 콘솔을 사용하여 애플리케이션 배포
<a name="tutorial-ecs-deployment-deploy"></a>

 이 섹션에서는 CodeDeploy 애플리케이션과 배포 그룹을 생성하여 업데이트된 애플리케이션을 Amazon ECS에 배포합니다. 배포 중에 CodeDeploy는 애플리케이션에 대한 프로덕션 트래픽을 새로운 대체 작업 세트의 새로운 버전으로 이동합니다. 이 단계를 완료하려면 다음 항목이 필요합니다.
+  Amazon ECS 클러스터 이름.
+  Amazon ECS 서비스 이름.
+  Application Load Balancer 이름 
+  프로덕션 리스너 포트.
+  대상 그룹 이름.
+  생성한 S3 버킷의 이름.

**CodeDeploy 애플리케이션을 만들려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/codedeploy/](https://console.aws.amazon.com/codedeploy/) CodeDeploy 콘솔을 엽니다.

1. **애플리케이션 생성**을 선택합니다.

1. **애플리케이션 이름**에 **ecs-demo-codedeploy-app**을 입력합니다.

1. **컴퓨팅 플랫폼**에서 **Amazon ECS**를 선택합니다.

1. **애플리케이션 생성**을 선택합니다.

**CodeDeploy 배포 그룹을 생성하려면**

1. 애플리케이션 페이지의 **Deployment groups(배포 그룹)** 탭에서 **Create deployment group(배포 그룹 생성)**을 선택합니다.

1. **Deployment group name(배포 그룹 이름)**에 **ecs-demo-dg**을 입력합니다.

1. **서비스 역할**에서 Amazon ECS에 액세스할 수 있는 권한을 CodeDeploy에 부여하는 서비스 역할을 선택합니다. 자세한 내용은 [에 대한 자격 증명 및 액세스 관리 AWS CodeDeploy](security-iam.md) 단원을 참조하십시오.

1. **환경 구성**에서 Amazon ECS 클러스터 이름과 서비스 이름을 선택합니다.

1. **로드 밸런서**에서 Amazon ECS 서비스에 트래픽을 공급하는 로드밸런서의 이름을 선택합니다.

1. **프로덕션 리스너 포트**에서 Amazon ECS 서비스에 서비스 프로덕션 트래픽을 공급하는 리스너의 포트와 프로토콜을 선택합니다(예: **HTTP: 80**). 이 자습서에는 선택 사항인 테스트 리스너가 포함되지 않으므로, **Test listener port(테스트 리스너 포트)**에서 포트를 선택하지 마십시오.

1. **Target group 1 name(대상 그룹 1 이름)**과 **Target group 2 name(대상 그룹 2 이름)**에서 배포 중 트래픽을 라우팅하기 위한 다른 대상 그룹 두 개를 선택합니다. 해당 로드밸런서용으로 생성한 대상 그룹인지 확인합니다. 무엇이 대상 그룹 1에 사용되고 무엇이 대상 그룹 2에 사용되는지는 문제되지 않습니다.

1. **Reroute traffic immediately(즉시 트래픽 다시 라우팅)**를 선택합니다.

1. **Original revision termination(원래 수정 종료)**에서 0일, 0시간, 5분을 선택합니다. 이렇게 하면 기본값(1시간)을 선택하는 경우보다 더 빠르게 배포가 완료됩니다.  
![\[CodeDeploy 콘솔의 환경 구성 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/images/ecs-demo-create-acd-dg.png)

1. [**Create deployment group**]을 선택합니다.

**Amazon ECS 애플리케이션을 배포하려면**

1. 배포 그룹 콘솔 페이지에서 **Create deployment(배포 생성)**를 선택합니다.

1.  **Deployment group(배포 그룹)**에서 **ecs-demo-dg**를 선택합니다.

1.  **Revision type(수정 유형)**에서 **My application is stored in Amazon S3(내 애플리케이션은 Amazon S3에 저장됨)**를 선택합니다. **Revision location(수정 위치)**에 S3 버킷의 이름을 입력합니다.

1.  **Revision file type(수정 파일 유형)**에서 **.json** 또는 **.yaml**을 적절하게 선택합니다.

1.  (선택 사항) **Deployment description(배포 설명)**에 배포에 대한 설명을 입력합니다.

1. **배포 만들기**를 선택합니다.

1.  **Deployment status(배포 상태)**에서 배포를 모니터링할 수 있습니다. 프로덕션 트래픽의 100%가 대체 작업 세트로 라우팅된 후 5분 대기 시간이 만료되기 전에 **원래 작업 세트 종료**를 선택하여 원래 작업 세트를 즉시 종료할 수 있습니다. **Terminate original task set(원래 작업 세트 종료)**를 선택하지 않으면 지정한 5분 대기 시간이 만료된 후에 원래 작업 세트가 종료됩니다.  
![\[CodeDeploy 콘솔의 배포 상태 섹션입니다.\]](http://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-without-test-listener.png)

# 4단계: 정리
<a name="tutorial-ecs-clean-up"></a>

 다음 자습서인 [튜토리얼: Amazon ECS 서비스 배포 및 확인 테스트](tutorial-ecs-deployment-with-hooks.md)은(는) 이 자습서를 기반으로 진행되며 여기서 생성한 CodeDeploy 애플리케이션과 배포 그룹을 사용합니다. 해당 튜토리얼의 단계를 따르려는 경우 이 단계를 건너뛰고 여기서 생성한 리소스를 삭제하지 마십시오.

**참고**  
 AWS 계정에는 생성한 CodeDeploy 리소스에 대한 요금이 부과되지 않습니다.

이러한 단계의 리소스 이름은 이 튜토리얼에서 제안된 이름입니다(예: CodeDeploy 애플리케이션의 이름은 **ecs-demo-codedeploy-app**). 다른 이름을 사용한 경우 정리 중에 반드시 해당 이름을 사용해야 합니다.

1. [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html) 명령을 사용하여 CodeDeploy 배포 그룹을 삭제합니다.

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-codedeploy-app --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) 명령을 사용하여 CodeDeploy 애플리케이션을 삭제합니다.

   ```
   aws deploy delete-application --application-name ecs-demo-codedeploy-app --region aws-region-id
   ```