

Amazon CodeCatalyst는 더 이상 신규 고객에게 공개되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [CodeCatalyst에서 마이그레이션하는 방법](migration.md) 단원을 참조하십시오.

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

# 워크플로를 사용하여 Amazon ECS에 배포
<a name="deploy-action-ecs"></a>

이 섹션에서는 CodeCatalyst 워크플로를 사용하여 컨테이너화된 애플리케이션을 Amazon Elastic Container Service 클러스터에 배포하는 방법을 설명합니다. 이렇게 하려면 워크플로에 **Amazon ECS에 배포** 작업을 추가해야 합니다. 이 작업은 사용자가 제공하는 [작업 정의](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html#welcome-task-definitions) 파일을 등록합니다. 등록 시 작업 정의는 [Amazon ECS 클러스터](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html#welcome-clusters)에서 실행되는 [Amazon ECS 서비스](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)에 의해 인스턴스화됩니다. "작업 정의 설명"은 Amazon ECS에 애플리케이션을 배포하는 것과 동일합니다.

이 작업을 사용하려면 Amazon ECS 클러스터, 서비스 및 작업 정의 파일이 준비되어 있어야 합니다.

Amazon ECS에 대해 자세히 알아보려면 *Amazon Elastic Container Service 개발자 안내서*를 참조하세요.

**작은 정보**  
**Amazon ECS에 배포** 작업을 사용하는 방법을 보여주는 자습서는 [자습서: Amazon ECS에 애플리케이션 배포](deploy-tut-ecs.md) 섹션을 참조하세요.

**작은 정보**  
**Amazon ECS에 배포** 작업의 작업 예시를 보려면 **Node.js API with AWS Fargate** 또는 **Java API with AWS Fargate** 블루프린트로 프로젝트를 생성합니다. 자세한 내용은 [블루프린트를 사용하여 프로젝트 생성](projects-create.md#projects-create-console-template) 섹션을 참조하세요.

**Topics**
+ ['Amazon ECS에 배포' 작업에 사용되는 런타임 이미지](#deploy-action-ecs-runtime)
+ [자습서: Amazon ECS에 애플리케이션 배포](deploy-tut-ecs.md)
+ ['Amazon ECS에 배포' 작업 추가](deploy-action-ecs-adding.md)
+ ['Amazon ECS에 배포' 변수](deploy-action-ecs-variables.md)
+ ['Amazon ECS에 배포' 작업 YAML](deploy-action-ref-ecs.md)

## 'Amazon ECS에 배포' 작업에 사용되는 런타임 이미지
<a name="deploy-action-ecs-runtime"></a>

**Amazon ECS에 배포** 작업은 [2022년 11월 이미지](build-images.md#build.previous-image)에서 실행됩니다. 자세한 내용은 [활성 이미지](build-images.md#build-curated-images) 섹션을 참조하세요.

# 자습서: Amazon ECS에 애플리케이션 배포
<a name="deploy-tut-ecs"></a>

이 자습서에서는 워크플로, Amazon ECS 및 기타 몇 가지 AWS 서비스를 사용하여 Amazon Elastic Container Service(Amazon ECS)에 서버리스 애플리케이션을 배포하는 방법을 알아봅니다. 배포된 애플리케이션은 Apache 웹 서버 Docker 이미지를 기반으로 구축된 간단한 Hello World 웹 사이트입니다. 자습서에서는 클러스터 설정과 같은 필수 준비 작업을 안내한 다음 애플리케이션을 빌드하고 배포하기 위한 워크플로를 생성하는 방법을 설명합니다.

**작은 정보**  
이 자습서를 진행하는 대신 전체 Amazon ECS 설정을 수행하는 블루프린트를 사용할 수 있습니다. **Node.js API with AWS Fargate** 또는 **Java API with AWS Fargate** 블루프린트를 사용해야 합니다. 자세한 내용은 [블루프린트를 사용하여 프로젝트 생성](projects-create.md#projects-create-console-template) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#deploy-tut-ecs-prereqs)
+ [1단계: AWS 사용자 설정 및 AWS CloudShell](#deploy-tut-ecs-user-cloudshell)
+ [2단계: Amazon ECS에 자리 표시자 애플리케이션 배포](#deploy-tut-ecs-placeholder)
+ [3단계: Amazon ECR 이미지 리포지토리 생성](#deploy-tut-ecs-ecr)
+ [4단계: AWS 역할 생성](#deploy-tut-ecs-build-deploy-roles)
+ [5단계: CodeCatalyst에 AWS 역할 추가](#deploy-tut-ecs-import-roles)
+ [6단계: 소스 리포지토리 생성](#deploy-tut-ecs-source-repo)
+ [7단계: 소스 파일 추가](#deploy-tut-ecs-source-files)
+ [8단계: 워크플로 생성 및 실행](#deploy-tut-ecs-workflow)
+ [9단계: 소스 파일 변경](#deploy-tut-ecs-change)
+ [정리](#deploy-tut-ecs-cleanup)

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

시작하기 전:
+ 연결된 AWS 계정이 있는 CodeCatalyst **스페이스**가 필요합니다. 자세한 내용은 [스페이스 생성](spaces-create.md) 단원을 참조하십시오.
+ 스페이스에는 다음과 같은 빈 프로젝트가 필요합니다.

  ```
  codecatalyst-ecs-project
  ```

  **처음부터 시작** 옵션을 사용하여 이 프로젝트를 생성합니다.

  자세한 내용은 [Amazon CodeCatalyst에서 빈 프로젝트 생성](projects-create.md#projects-create-empty) 섹션을 참조하세요.
+ 프로젝트에는 다음과 같은 CodeCatalyst **환경**이 필요합니다.

  ```
  codecatalyst-ecs-environment
  ```

  다음과 같이 이 환경을 구성합니다.
  + **비프로덕션**과 같은 유형을 선택합니다.
  +  AWS 계정에 연결합니다.
  + **기본 IAM 역할**의 경우 아무 역할이나 선택합니다. 나중에 다른 역할을 지정합니다.

  자세한 내용은 [AWS 계정 및 VPCs에 배포](deploy-environments.md) 단원을 참조하십시오.

## 1단계: AWS 사용자 설정 및 AWS CloudShell
<a name="deploy-tut-ecs-user-cloudshell"></a>

이 자습서의 첫 번째 단계는에서 사용자를 생성하고이 사용자로 인스턴스를 AWS IAM Identity Center AWS CloudShell 시작하는 것입니다. 이 자습서 기간 동안 CloudShell은 개발 컴퓨터이며 AWS 리소스와 서비스를 구성하는 곳입니다. 자습서를 완료한 후 이 사용자를 삭제합니다.

**참고**  
이 자습서에는 루트 사용자를 사용하지 마세요. 별도의 사용자를 생성해야 합니다. 그렇지 않으면 나중에 AWS Command Line Interface (CLI)에서 작업을 수행할 때 문제가 발생할 수 있습니다.

IAM Identity Center 사용자 및 CloudShell에 대한 자세한 내용은 *AWS IAM Identity Center 사용 설명서* 및 *AWS CloudShell 사용 설명서*를 참조하세요.

**IAM Identity Center 사용자를 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/singlesignon/](https://console.aws.amazon.com/singlesignon/) AWS IAM Identity Center 콘솔을 엽니다.
**참고**  
CodeCatalyst 스페이스에 AWS 계정 연결된를 사용하여 로그인해야 합니다. 스페이스로 이동하여 **AWS 계정** 탭을 선택하고 연결된 계정을 확인할 수 있습니다. 자세한 내용은 [스페이스 생성](spaces-create.md) 섹션을 참조하세요.

1. 탐색 창에서 **Users**와 **Add user**를 차례대로 선택합니다.

1. **사용자 이름**에 다음을 입력합니다.

   ```
   CodeCatalystECSUser
   ```

1. **암호**에서 **이 사용자와 공유할 수 있는 일회용 암호 생성**을 선택합니다.

1. **이메일 주소** 및 **이메일 주소 확인**에 IAM Identity Center에 아직 없는 이메일 주소를 입력합니다.

1. **이름** 및 **성**에 다음을 입력합니다.

   ```
   CodeCatalystECSUser
   ```

1. **표시 이름**에 자동으로 생성된 이름을 유지합니다.

   ```
   CodeCatalystECSUser CodeCatalystECSUser
   ```

1. **다음**을 선택합니다.

1. **그룹에 사용자 추가** 페이지에서 **다음**을 선택합니다.

1. **검토 및 사용자 추가** 페이지에서 정보를 검토하고 **사용자 추가**를 선택합니다.

   **일회용 암호** 대화 상자가 나타납니다.

1. **복사**를 선택한 다음 AWS 액세스 포털 URL 및 일회용 암호를 포함하여 로그인 정보를 붙여넣습니다.

1. **닫기**를 선택하세요.

**권한 집합을 생성하려면**

이 권한 세트를 나중에 `CodeCatalystECSUser`에 할당합니다.

1. 탐색 창에서 **권한 세트**를 선택한 다음 **권한 세트 생성**을 선택합니다.

1. **사전 정의된 권한 세트**를 선택하고 **AdministratorAccess**를 선택합니다. 이 정책은 모든 AWS 서비스에 대한 전체 권한을 제공합니다.

1. **다음**을 선택합니다.

1. **권한 세트 이름**에 다음을 입력합니다.

   ```
   CodeCatalystECSPermissionSet
   ```

1. **다음**을 선택합니다.

1. **검토 및 생성** 페이지에서 정보를 검토하고 **생성**을 선택합니다.

**이 권한 세트를 CodeCatalystECSUser에게 할당하려면**

1. 탐색 창에서 **AWS 계정**를 선택한 다음 현재 로그인 AWS 계정 한 옆의 확인란을 선택합니다.

1. **사용자 또는 그룹 할당**을 선택합니다.

1. **사용자** 탭을 선택합니다.

1. `CodeCatalystECSUser` 옆의 확인란을 선택합니다.

1. **다음**을 선택합니다.

1. `CodeCatalystECSPermissionSet` 옆의 확인란을 선택합니다.

1. **다음**을 선택합니다.

1. 정보를 검토하고 **제출**을 선택합니다.

   이제 `CodeCatalystECSUser` 및를 `CodeCatalystECSPermissionSet`에 할당하여 함께 AWS 계정바인딩했습니다.

**로그아웃했다가 CodeCatalystECSUser로 다시 로그인하려면**

1. 로그아웃하기 전에에 대한 AWS 액세스 포털 URL과 사용자 이름 및 일회용 암호가 있는지 확인합니다`CodeCatalystECSUser`. 이전에 이 정보를 텍스트 편집기에 복사했어야 합니다.
**참고**  
이 정보가 없는 경우 IAM Identity Center의 `CodeCatalystECSUser` 세부 정보 페이지로 이동하여 **암호 재설정**, **일회용 암호 생성 [...]**을 선택한 후 **암호 재설정**을 다시 선택하면 화면에 해당 정보가 표시됩니다.

1. 로그아웃합니다 AWS.

1.  AWS 액세스 포털 URL을 브라우저의 주소 표시줄에 붙여 넣습니다.

1. `CodeCatalystECSUser`의 사용자 이름과 일회용 암호로 로그인합니다.

1. **새 암호**에서 암호를 입력하고 **새 암호 설정**을 선택합니다.

   화면에 **AWS 계정** 상자가 나타납니다.

1. **AWS 계정**를 선택한 다음 `CodeCatalystECSUser` 사용자 및 권한 세트를 할당 AWS 계정 한의 이름을 선택합니다.

1. `CodeCatalystECSPermissionSet` 옆에 있는 **Management Console**을 선택합니다.

   가 AWS Management Console 나타납니다. 이제 적절한 권한으로 `CodeCatalystECSUser`에 로그인되었습니다.

**AWS CloudShell 인스턴스를 시작하려면**

1. 의 상단 탐색 모음`CodeCatalystECSUser`에서 AWS 아이콘(![\[AWS icon\]](http://docs.aws.amazon.com/ko_kr/codecatalyst/latest/userguide/images/deploy/aws-logo.png))을 선택합니다.

   의 기본 페이지가 AWS Management Console 나타납니다.

1. 상단 탐색 모음에서 AWS CloudShell 아이콘(![\[CloudShell icon\]](http://docs.aws.amazon.com/ko_kr/codecatalyst/latest/userguide/images/deploy/CloudShell.png))을 선택합니다.

   CloudShell이 열립니다. CloudShell 환경이 생성되는 동안 기다립니다.
**참고**  
CloudShell 아이콘이 보이지 않는 경우 [CloudShell에서 지원하는 리전](https://docs.aws.amazon.com/cloudshell/latest/userguide/faq-list.html#regions-available)에 있는지 확인하세요. 이 자습서에서는 사용자가 미국 서부(오리건) 리전에 있다고 가정합니다.

**AWS CLI 가 설치되었는지 확인하려면**

1. CloudShell 터미널에서 다음을 입력합니다.

   ```
   aws --version
   ```

1. 버전이 나타나는지 확인합니다.

    AWS CLI 는 현재 사용자에 대해 이미 구성되어 `CodeCatalystECSUser`있으므로 일반적으로처럼 AWS CLI 키와 자격 증명을 구성할 필요가 없습니다.

## 2단계: Amazon ECS에 자리 표시자 애플리케이션 배포
<a name="deploy-tut-ecs-placeholder"></a>

이 섹션에서는 자리 표시자 애플리케이션을 Amazon ECS에 수동으로 배포합니다. 이 자리 표시자 애플리케이션은 워크플로에 의해 배포된 Hello World 애플리케이션으로 대체됩니다. 자리 표시자 애플리케이션은 Apache Web Server입니다.

Amazon ECS에 대해 자세히 알아보려면 *Amazon Elastic Container Service 개발자 안내서*를 참조하세요.

자리 표시자 애플리케이션을 배포하려면 다음 일련의 절차를 완료합니다.<a name="deploy-tut-ecs-create-task-execution-role"></a>

**태스크 실행 역할을 생성하는 방법**

이 역할은 Amazon ECS에 사용자를 대신하여 API를 호출할 수 있는 AWS Fargate 권한을 부여합니다.

1. 신뢰 정책 생성:

   1. 에 다음 명령을 AWS CloudShell입력합니다.

      ```
      cat > codecatalyst-ecs-trust-policy.json
      ```

      CloudShell 터미널에 깜박이는 프롬프트가 나타납니다.

   1. 프롬프트에서 다음 코드를 입력합니다.

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
              "Service": "ecs-tasks.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

------

   1. 커서를 마지막 중괄호(`}`) 뒤에 놓습니다.

   1. **Enter**를 누른 다음 **Ctrl\$1d**를 눌러 파일을 저장하고 cat을 종료합니다.

1. 태스크 실행 역할을 생성합니다.

   ```
   aws iam create-role \
         --role-name codecatalyst-ecs-task-execution-role \
         --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
   ```

1.  AWS 관리형 `AmazonECSTaskExecutionRolePolicy` 정책을 역할에 연결합니다.

   ```
   aws iam attach-role-policy \
         --role-name codecatalyst-ecs-task-execution-role \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
   ```

1. 역할의 세부 정보를 표시합니다.

   ```
   aws iam get-role \
         --role-name codecatalyst-ecs-task-execution-role
   ```

1. 역할의 `"Arn":` 값을 기록해 둡니다. 예시: `arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role`. 나중에 이 Amazon 리소스 이름(ARN)이 필요합니다.

**Amazon ECS 클러스터를 생성하려면**

이 클러스터에는 Apache 자리 표시자 애플리케이션과 이후 Hello World 애플리케이션이 포함됩니다.

1. 에서 빈 클러스터를 `CodeCatalystECSUser` AWS CloudShell생성합니다.

   ```
   aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
   ```

1. (선택 사항) 클러스터가 성공적으로 생성되었는지 확인합니다.

   ```
   aws ecs list-clusters
   ```

   `codecatalyst-ecs-cluster` 클러스터의 ARN이 목록에 나타나 성공적으로 생성되었음을 나타냅니다.

**태스크 정의 파일을 생성하는 방법**

태스크 정의 파일은 DockerHub에서 가져온 [Apache 2.4 웹 서버](https://hub.docker.com/_/httpd) Docker 이미지(`httpd:2.4`)를 실행함을 나타냅니다.

1. 의 `CodeCatalystECSUser`에서 작업 정의 파일을 AWS CloudShell생성합니다.

   ```
   cat > taskdef.json
   ```

1. 프롬프트에서 다음 코드를 붙여넣습니다.

   ```
   {
       "executionRoleArn": "arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role",
       "containerDefinitions": [
           {
               "name": "codecatalyst-ecs-container",
               "image": "httpd:2.4",
               "essential": true,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ]
           }
       ],
       "requiresCompatibilities": [
           "FARGATE"
       ],
       "cpu": "256",
       "family": "codecatalyst-ecs-task-def",
       "memory": "512",
       "networkMode": "awsvpc"
   }
   ```

   앞의 코드에서 *arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role*을

   [태스크 실행 역할을 생성하는 방법](#deploy-tut-ecs-create-task-execution-role)에서 기록한 태스크 실행 역할의 ARN으로 바꿉니다.

1. 커서를 마지막 중괄호(`}`) 뒤에 놓습니다.

1. **Enter**를 누른 다음 **Ctrl\$1d**를 눌러 파일을 저장하고 cat을 종료합니다.

**Amazon ECS로 태스크 정의 파일을 등록하려면**

1. 의 `CodeCatalystECSUser`에서 작업 정의를 AWS CloudShell등록합니다.

   ```
   aws ecs register-task-definition \
       --cli-input-json file://taskdef.json
   ```

1. (선택 사항) 태스크 정의가 등록되었는지 확인합니다.

   ```
   aws ecs list-task-definitions
   ```

   `codecatalyst-ecs-task-def` 태스크 정의가 목록에 나타나야 합니다.

**Amazon ECS 서비스를 생성하는 방법**

Amazon ECS 서비스는 Apache 자리 표시자 애플리케이션과 이후 Hello World 애플리케이션의 태스크(및 관련 Docker 컨테이너)를 실행합니다.

1. `CodeCatalystECSUser`로서 아직 하지 않았다면 Amazon Elastic Container Service 콘솔로 전환합니다.

1. 앞서 생성한 `codecatalyst-ecs-cluster` 클러스터를 선택합니다.

1. **서비스** 탭에서 **생성**을 선택합니다.

1. **생성** 페이지에서 다음을 수행합니다.

   1. 다음에 나열된 설정을 제외한 모든 기본 설정을 유지합니다.

   1. **시작 유형**에서 **FARGATE**를 선택합니다.

   1. **태스크 정의**의 **패밀리** 드롭다운 목록에서 다음을 선택합니다.

      `codecatalyst-ecs-task-def`

   1. **서비스 이름**에 다음을 입력합니다.

      ```
      codecatalyst-ecs-service
      ```

   1. **원하는 태스크**에 다음을 입력합니다.

      ```
      3
      ```

      이 자습서에서는 각 작업이 단일 Docker 컨테이너를 시작합니다.

   1. **네트워킹** 섹션을 확장합니다.

   1. **VPC**에서 VPC를 선택합니다.

   1. **서브넷**에서 서브넷을 선택합니다.
**참고**  
서브넷을 하나만 지정합니다. 이 자습서에 필요한 것은 이것뿐입니다.
**참고**  
VPC와 서브넷이 없는 경우 생성합니다. *Amazon VPC 사용 설명서*의 [VPC에 서브넷 생성](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)을 참조하여 [VPC를 생성](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)합니다.

   1. **보안 그룹**에서 **새 보안 그룹 생성**을 선택하고 다음을 수행합니다.

      1. **보안 그룹 이름**에 다음을 입력합니다.

         ```
         codecatalyst-ecs-security-group
         ```

      1. **보안 그룹 설명**에 다음을 입력합니다.

         ```
         CodeCatalyst ECS security group
         ```

      1. **규칙 추가**를 선택합니다. **유형**에서 **HTTP**를 선택하고 **소스**에서 **Anywhere**를 선택합니다.

   1. 하단에서 **생성**을 선택합니다.

   1. 서비스가 생성되는 동안 기다립니다. 몇 분 정도 소요될 수 있습니다.

1. **태스크** 탭을 선택한 후 새로 고침 버튼을 선택합니다. 세 태스크 모두에서 **마지막 상태** 열이 **실행 중**으로 설정되어 있는지 확인합니다.

**(선택 사항) Apache 자리 표시자 애플리케이션이 실행 중인지 확인하려면**

1. **태스크** 탭에서 세 가지 작업 중 하나를 선택합니다.

1. **퍼블릭 IP** 필드에서 **개방형 주소**를 선택합니다.

   `It Works!` 페이지가 나타납니다. 이는 Amazon ECS 서비스가 Apache 이미지로 Docker 컨테이너를 시작한 태스크를 성공적으로 시작했음을 나타냅니다.

   자습서의 이 시점에서 Amazon ECS 클러스터, 서비스 및 태스크 정의와 Apache 자리 표시자 애플리케이션을 수동으로 배포했습니다. 이러한 모든 항목이 준비되면 이제 Apache 자리 표시자 애플리케이션을 자습서의 Hello World 애플리케이션으로 대체하는 워크플로를 생성할 준비가 된 것입니다.

## 3단계: Amazon ECR 이미지 리포지토리 생성
<a name="deploy-tut-ecs-ecr"></a>

이 섹션에서는 Amazon Elastic Container Registry(Amazon ECR)에서 프라이빗 이미지 리포지토리를 생성합니다. 이 리포지토리에는 이전에 배포한 Apache 자리 표시자 이미지를 대체하는 자습서의 Docker 이미지가 저장됩니다.

Amazon ECR에 대한 자세한 내용은 *Amazon Elastic Container Registry 사용 설명서*를 참조합니다.

**Amazon ECR에서 이미지 리포지토리를 생성하려면**

1. 에서 Amazon ECR에 빈 리포지토리를 `CodeCatalystECSUser` AWS CloudShell생성합니다.

   ```
   aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
   ```

1. Amazon ECR 리포지토리의 세부 정보를 표시합니다.

   ```
   aws ecr describe-repositories \
         --repository-names codecatalyst-ecs-image-repo
   ```

1. `“repositoryUri”:` 값을 기록해 둡니다. 예시: `111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo`.

   나중에 워크플로에 리포지토리를 추가할 때 필요합니다.

## 4단계: AWS 역할 생성
<a name="deploy-tut-ecs-build-deploy-roles"></a>

이 섹션에서는 CodeCatalyst 워크플로가 작동하는 데 필요한 AWS IAM 역할을 생성합니다. 이러한 역할은 다음과 같습니다.
+ **빌드 역할** - CodeCatalyst 빌드 작업(워크플로 내)에 AWS 계정에 액세스하고 Amazon ECR 및 Amazon EC2에 쓸 수 있는 권한을 부여합니다.
+ **역할 배포** - CodeCatalyst **ECS에 배포** 작업(워크플로 내)에 AWS 계정, Amazon ECS 및 기타 몇 가지 AWS 서비스에 액세스할 수 있는 권한을 부여합니다.

IAM 역할에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 섹션을 참조하세요.

**참고**  
시간을 절약하기 위해 이전에 나열한 두 역할 대신 `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할이라는 단일 역할을 생성할 수 있습니다. 자세한 내용은 [계정 및 스페이스의 **CodeCatalystWorkflowDevelopmentRole-*spaceName*** 역할 생성](ipa-iam-roles.md#ipa-iam-roles-service-create) 섹션을 참조하세요. `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할에는 보안 위험을 초래할 수 있는 매우 광범위한 권한이 있음을 이해합니다. 보안에 대한 우려가 적은 자습서 및 시나리오에서만 이 역할을 사용하는 것이 좋습니다. 이 자습서에서는 이전에 나열된 두 역할을 생성하고 있다고 가정합니다.

빌드 및 배포 역할을 생성하려면 AWS Management Console 또는를 사용할 수 있습니다 AWS CLI.

------
#### [ AWS Management Console ]

빌드 및 배포 역할을 생성하려면 다음 절차 시리즈를 완료합니다.

**빌드 역할을 생성하려면**

1. 역할에 대한 정책을 다음과 같이 생성합니다.

   1. 에 로그인합니다 AWS.

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

   1. 탐색 창에서 **Policies**를 선택합니다.

   1. **정책 생성**을 선택합니다.

   1. **JSON** 탭을 선택합니다.

   1. 기존 코드를 삭제합니다.

   1. 다음 코드를 붙여넣습니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ecr:*",
                      "ec2:*"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
**참고**  
역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문에서 와일드카드를 사용한 다음, 사용 가능한 리소스 이름으로 정책 범위를 좁힙니다.  

      ```
      "Resource": "*"
      ```

   1. **다음: 태그**를 선택합니다.

   1. **다음: 검토**를 선택합니다.

   1. **이름**에 다음과 같이 입력합니다.

      ```
      codecatalyst-ecs-build-policy
      ```

   1. **정책 생성**을 선택합니다.

      이제 권한 정책을 생성했습니다.

1. 다음과 같이 빌드 역할을 생성합니다.

   1. 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

   1. **사용자 지정 신뢰 정책**을 선택합니다.

   1. 기존 사용자 지정 신뢰 정책을 삭제합니다.

   1. 다음 사용자 지정 신뢰 정책을 추가합니다.

   1. **다음**을 선택합니다.

   1. **권한 정책**에서 `codecatalyst-ecs-build-policy`를 검색하고 해당 확인란을 선택합니다.

   1. **다음**을 선택합니다.

   1. **역할 이름**에 다음과 같이 입력합니다.

      ```
      codecatalyst-ecs-build-role
      ```

   1. **역할 설명**에 다음과 같이 입력합니다.

      ```
      CodeCatalyst ECS build role
      ```

   1. **역할 생성**을 선택합니다.

   이제 신뢰 정책 및 권한 정책으로 빌드 역할을 생성했습니다.

1. 다음과 같이 빌드 역할 ARN을 가져옵니다.

   1. 탐색 창에서 **역할**을 선택합니다.

   1. 검색 상자에 방금 생성한 역할의 이름을 입력합니다(`codecatalyst-ecs-build-role`).

   1. 목록에서 역할을 선택합니다.

      역할의 **요약** 페이지가 나타납니다.

   1. 상단에서 **ARN** 값을 복사합니다. 나중에 필요합니다.

**배포 역할을 생성하려면**

1. 역할에 대한 정책을 다음과 같이 생성합니다.

   1. 에 로그인합니다 AWS.

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

   1. 탐색 창에서 **Policies**를 선택합니다.

   1. **정책 생성**을 선택하세요.

   1. **JSON** 탭을 선택합니다.

   1. 기존 코드를 삭제합니다.

   1. 다음 코드를 붙여넣습니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [{
          "Action":[
            "ecs:DescribeServices",
            "ecs:CreateTaskSet",
            "ecs:DeleteTaskSet",
            "ecs:ListClusters",
            "ecs:RegisterTaskDefinition",
            "ecs:UpdateServicePrimaryTaskSet",
            "ecs:UpdateService",
            "elasticloadbalancing:DescribeTargetGroups",
            "elasticloadbalancing:DescribeListeners",
            "elasticloadbalancing:ModifyListener",
            "elasticloadbalancing:DescribeRules",
            "elasticloadbalancing:ModifyRule",
            "lambda:InvokeFunction",
            "lambda:ListFunctions",
            "cloudwatch:DescribeAlarms",
            "sns:Publish",
            "sns:ListTopics", 
            "s3:GetObject",
            "s3:GetObjectVersion",
            "codedeploy:CreateApplication", 
            "codedeploy:CreateDeployment", 
            "codedeploy:CreateDeploymentGroup", 
            "codedeploy:GetApplication", 
            "codedeploy:GetDeployment", 
            "codedeploy:GetDeploymentGroup", 
            "codedeploy:ListApplications", 
            "codedeploy:ListDeploymentGroups", 
            "codedeploy:ListDeployments", 
            "codedeploy:StopDeployment", 
            "codedeploy:GetDeploymentTarget", 
            "codedeploy:ListDeploymentTargets", 
            "codedeploy:GetDeploymentConfig", 
            "codedeploy:GetApplicationRevision", 
            "codedeploy:RegisterApplicationRevision", 
            "codedeploy:BatchGetApplicationRevisions", 
            "codedeploy:BatchGetDeploymentGroups", 
            "codedeploy:BatchGetDeployments", 
            "codedeploy:BatchGetApplications", 
            "codedeploy:ListApplicationRevisions", 
            "codedeploy:ListDeploymentConfigs", 
            "codedeploy:ContinueDeployment"           
         ],
         "Resource":"*",
         "Effect":"Allow"
      },{"Action":[
            "iam:PassRole"
         ],
         "Effect":"Allow",
         "Resource":"*",
         "Condition":{"StringLike":{"iam:PassedToService":[
                  "ecs-tasks.amazonaws.com",
                  "codedeploy.amazonaws.com"
               ]
            }
         }
      }]
      }
      ```

------
**참고**  
역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문의 와일드카드를 사용합니다. 그런 다음 사용 가능한 리소스 이름을 사용하여 정책의 범위를 좁힐 수 있습니다.  

      ```
      "Resource": "*"
      ```

   1. **다음: 태그**를 선택합니다.

   1. **다음: 검토**를 선택합니다.

   1. **이름**에 다음과 같이 입력합니다.

      ```
      codecatalyst-ecs-deploy-policy
      ```

   1. **정책 생성**을 선택합니다.

      이제 권한 정책을 생성했습니다.

1. 다음과 같이 배포 역할을 생성합니다.

   1. 탐색 창에서 **역할**을 선택한 후 **역할 생성**을 선택합니다.

   1. **사용자 지정 신뢰 정책**을 선택합니다.

   1. 기존 사용자 지정 신뢰 정책을 삭제합니다.

   1. 다음 사용자 지정 신뢰 정책을 추가합니다.

   1. **다음**을 선택합니다.

   1. **권한 정책**에서 `codecatalyst-ecs-deploy-policy`를 검색하고 해당 확인란을 선택합니다.

   1. **다음**을 선택합니다.

   1. **역할 이름**에 다음과 같이 입력합니다.

      ```
      codecatalyst-ecs-deploy-role
      ```

   1. **역할 설명**에 다음과 같이 입력합니다.

      ```
      CodeCatalyst ECS deploy role
      ```

   1. **역할 생성**을 선택합니다.

   이제 신뢰 정책으로 배포 역할을 생성했습니다.

1. 다음과 같이 배포 역할 ARN을 가져옵니다.

   1. 탐색 창에서 **역할**을 선택합니다.

   1. 검색 상자에 방금 생성한 역할의 이름을 입력합니다(`codecatalyst-ecs-deploy-role`).

   1. 목록에서 역할을 선택합니다.

      역할의 **요약** 페이지가 나타납니다.

   1. 상단에서 **ARN** 값을 복사합니다. 나중에 필요합니다.

------
#### [ AWS CLI ]

빌드 및 배포 역할을 생성하려면 다음 절차 시리즈를 완료합니다.

**두 역할에 대한 신뢰 정책을 생성하려면**

의 `CodeCatalystECSUser`에서 신뢰 정책 파일을 AWS CloudShell생성합니다.

1. 다음 파일을 생성합니다.

   ```
   cat > codecatalyst-ecs-trust-policy.json
   ```

1. 터미널 프롬프트에서 다음 코드를 붙여넣습니다.

1. 커서를 마지막 중괄호(`}`) 뒤에 놓습니다.

1. **Enter**를 누른 다음 **Ctrl\$1d**를 눌러 파일을 저장하고 cat을 종료합니다.

**빌드 정책 및 빌드 역할을 생성하려면**

1. 다음 빌드 정책을 생성합니다.

   1. `CodeCatalystECSUser`에서 로 빌드 정책 파일을 AWS CloudShell생성합니다.

      ```
      cat > codecatalyst-ecs-build-policy.json
      ```

   1. 프롬프트에서 다음 코드를 입력합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ecr:*",
                      "ec2:*"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. 커서를 마지막 중괄호(`}`) 뒤에 놓습니다.

   1. **Enter**를 누른 다음 **Ctrl\$1d**를 눌러 파일을 저장하고 cat을 종료합니다.

1. 빌드 정책을 AWS다음에 추가합니다.

   ```
   aws iam create-policy \
       --policy-name codecatalyst-ecs-build-policy \
       --policy-document file://codecatalyst-ecs-build-policy.json
   ```

1. 명령 출력에서 와 같은 `"arn":` 값을 기록해 둡니다(예: `arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy`). 나중에 이 ARN이 필요합니다.

1. 빌드 역할을 생성하여 신뢰 정책에 연결합니다.

   ```
   aws iam create-role \
         --role-name codecatalyst-ecs-build-role \
         --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
   ```

1. 빌드 정책을 빌드 역할에 연결합니다.

   ```
   aws iam attach-role-policy \
         --role-name codecatalyst-ecs-build-role \
         --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy
   ```

   *arn:aws:iam::111122223333:policy/codecatalyst-ecs-build-policy*가 앞서 언급한 빌드 정책의 ARN으로 대체되는 경우.

1. 빌드 역할의 세부 정보를 표시합니다.

   ```
   aws iam get-role \
         --role-name codecatalyst-ecs-build-role
   ```

1. 역할의 `"Arn":` 값을 기록해 둡니다. 예시: `arn:aws:iam::111122223333:role/codecatalyst-ecs-build-role`. 나중에 이 ARN이 필요합니다.

**배포 정책을 생성하고 역할을 배포하려면**

1. 배포 정책 생성:

   1. 에서 배포 정책 파일을 AWS CloudShell생성합니다.

      ```
      cat > codecatalyst-ecs-deploy-policy.json
      ```

   1. 프롬프트에서 다음 코드를 입력합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [{
          "Action":[
            "ecs:DescribeServices",
            "ecs:CreateTaskSet",
            "ecs:DeleteTaskSet",
            "ecs:ListClusters",
            "ecs:RegisterTaskDefinition",
            "ecs:UpdateServicePrimaryTaskSet",
            "ecs:UpdateService",
            "elasticloadbalancing:DescribeTargetGroups",
            "elasticloadbalancing:DescribeListeners",
            "elasticloadbalancing:ModifyListener",
            "elasticloadbalancing:DescribeRules",
            "elasticloadbalancing:ModifyRule",
            "lambda:InvokeFunction",
            "lambda:ListFunctions",
            "cloudwatch:DescribeAlarms",
            "sns:Publish",
            "sns:ListTopics", 
            "s3:GetObject",
            "s3:GetObjectVersion",
            "codedeploy:CreateApplication", 
            "codedeploy:CreateDeployment", 
            "codedeploy:CreateDeploymentGroup", 
            "codedeploy:GetApplication", 
            "codedeploy:GetDeployment", 
            "codedeploy:GetDeploymentGroup", 
            "codedeploy:ListApplications", 
            "codedeploy:ListDeploymentGroups", 
            "codedeploy:ListDeployments", 
            "codedeploy:StopDeployment", 
            "codedeploy:GetDeploymentTarget", 
            "codedeploy:ListDeploymentTargets", 
            "codedeploy:GetDeploymentConfig", 
            "codedeploy:GetApplicationRevision", 
            "codedeploy:RegisterApplicationRevision", 
            "codedeploy:BatchGetApplicationRevisions", 
            "codedeploy:BatchGetDeploymentGroups", 
            "codedeploy:BatchGetDeployments", 
            "codedeploy:BatchGetApplications", 
            "codedeploy:ListApplicationRevisions", 
            "codedeploy:ListDeploymentConfigs", 
            "codedeploy:ContinueDeployment"           
         ],
         "Resource":"*",
         "Effect":"Allow"
      },{"Action":[
            "iam:PassRole"
         ],
         "Effect":"Allow",
         "Resource":"*",
         "Condition":{"StringLike":{"iam:PassedToService":[
                  "ecs-tasks.amazonaws.com",
                  "codedeploy.amazonaws.com"
               ]
            }
         }
      }]
      }
      ```

------
**참고**  
역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문에서 와일드카드를 사용한 다음, 사용 가능한 리소스 이름으로 정책 범위를 좁힙니다.  

      ```
      "Resource": "*"
      ```

   1. 커서를 마지막 중괄호(`}`) 뒤에 놓습니다.

   1. **Enter**를 누른 다음 **Ctrl\$1d**를 눌러 파일을 저장하고 cat을 종료합니다.

1. 배포 정책을 AWS다음에 추가합니다.

   ```
   aws iam create-policy \
       --policy-name codecatalyst-ecs-deploy-policy \
       --policy-document file://codecatalyst-ecs-deploy-policy.json
   ```

1. 명령 출력에서 와 같은 `"arn":` 값을 기록해 둡니다(예: `arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy`). 나중에 이 ARN이 필요합니다.

1. 빌드 역할을 생성하여 신뢰 정책에 연결합니다.

   ```
   aws iam create-role \
         --role-name codecatalyst-ecs-deploy-role \
         --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
   ```

1. 배포 정책을 배포 역할에 연결합니다. 여기서 *arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy*는 앞서 언급한 배포 정책의 ARN으로 대체됩니다.

   ```
   aws iam attach-role-policy \
         --role-name codecatalyst-ecs-deploy-role \
         --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-ecs-deploy-policy
   ```

1. 배포 역할의 세부 정보를 표시합니다.

   ```
   aws iam get-role \
         --role-name codecatalyst-ecs-deploy-role
   ```

1. 역할의 `"Arn":` 값을 기록해 둡니다. 예시: `arn:aws:iam::111122223333:role/codecatalyst-ecs-deploy-role`. 나중에 이 ARN이 필요합니다.

------

## 5단계: CodeCatalyst에 AWS 역할 추가
<a name="deploy-tut-ecs-import-roles"></a>

이 단계에서는 빌드 역할(`codecatalyst-ecs-build-role`)을 추가하고 스페이스의 CodeCatalyst 계정 연결에 역할(`codecatalyst-ecs-deploy-role`)을 배포합니다.

**계정 연결에 빌드 및 배포 역할을 추가하려면**

1. CodeCatalyst에서 스페이스로 이동합니다.

1. **AWS 계정**을 선택합니다. 계정 연결 목록이 나타납니다.

1. 빌드 및 배포 역할을 생성한 계정을 나타내는 AWS 계정 연결을 선택합니다.

1. **관리 콘솔에서 역할 AWS 관리를** 선택합니다.

   **Amazon CodeCatalyst 스페이스에 IAM 역할 추가** 페이지가 나타납니다. 페이지에 액세스하려면 로그인해야 할 수 있습니다.

1. **IAM에서 생성한 기존 역할 추가**를 선택합니다.

   드롭다운 목록이 나타납니다. 목록에는 `codecatalyst-runner.amazonaws.com` 및 `codecatalyst.amazonaws.com` 서비스 위탁자가 포함된 신뢰 정책이 있는 모든 IAM 역할이 표시됩니다.

1. 드롭다운 목록에서 `codecatalyst-ecs-build-role`을 선택하고 **역할 추가**를 선택합니다.
**참고**  
`The security token included in the request is invalid`가 표시되면 적절한 권한이 없기 때문일 수 있습니다. 이 문제를 해결하려면 CodeCatalyst 스페이스를 생성할 때 사용한 AWS 계정으로 다시 로그인 AWS 하면에서 로그아웃합니다.

1. **IAM 역할 추가**를 선택하고 **IAM에서 생성한 기존 역할 추가**를 선택한 다음 드롭다운 목록에서 `codecatalyst-ecs-deploy-role`을 선택합니다. [**Add role**]을 선택합니다.

   이제 스페이스에 빌드 및 배포 역할을 추가했습니다.

1. **Amazon CodeCatalyst 표시 이름**의 값을 복사합니다. 워크플로를 생성할 때 나중에 이 값이 필요합니다.

## 6단계: 소스 리포지토리 생성
<a name="deploy-tut-ecs-source-repo"></a>

이 단계에서는 CodeCatalyst에 소스 리포지토리를 생성합니다. 이 리포지토리는 작업 정의 파일과 같은 자습서의 소스 파일을 저장합니다.

소스 리포지토리에 대한 자세한 정보는 [소스 리포지토리 생성](source-repositories-create.md) 섹션을 참조하세요.

**소스 리포지토리를 생성하려면**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/)에서 CodeCatalyst 콘솔을 엽니다.

1. `codecatalyst-ecs-project` 프로젝트로 이동합니다.

1. 탐색 창에서 **코드**를 선택한 다음 **소스 리포지토리**를 선택합니다.

1. **리포지토리 추가**를 선택하고 **리포지토리 생성**을 선택합니다.

1. **리포지토리 이름**에 다음과 같이 입력합니다.

   ```
   codecatalyst-ecs-source-repository
   ```

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

## 7단계: 소스 파일 추가
<a name="deploy-tut-ecs-source-files"></a>

이 섹션에서는 Hello World 소스 파일을 CodeCatalyst 리포지토리 `codecatalyst-ecs-source-repository`에 추가합니다. 다음과 같이 구성됩니다.
+ `index.html` 파일 - 브라우저에 Hello World 메시지를 표시합니다.
+ Dockerfile - Docker 이미지에 사용할 기본 이미지와 Docker 명령으로 적용할 기본 이미지를 설명합니다.
+ `taskdef.json` 파일 - 클러스터에서 작업을 시작할 때 사용할 Docker 이미지를 정의합니다.

폴더의 구조는 다음과 같습니다.

```
.
|— public-html
|  |— index.html
|— Dockerfile
|— taskdef.json
```

**참고**  
다음 지침은 CodeCatalyst 콘솔을 사용하여 파일을 추가하는 방법을 보여주지만 원하는 경우 Git을 사용할 수 있습니다. 자세한 내용은 [소스 리포지토리 복제](source-repositories-clone.md)을 참조하세요.

**Topics**
+ [index.html](#deploy-tut-ecs-source-files-index)
+ [Dockerfile](#deploy-tut-ecs-source-files-dockerfile)
+ [taskdef.json](#deploy-tut-ecs-source-files-taskdef)

### index.html
<a name="deploy-tut-ecs-source-files-index"></a>

`index.html` 파일에 브라우저에 Hello World 메시지가 표시됩니다.

**index.html 파일을 추가하려면**

1. CodeCatalyst 콘솔에서 `codecatalyst-ecs-source-repository` 소스 리포지토리로 이동합니다.

1. **파일**에서 **파일 생성**을 선택합니다.

1. **파일 이름**에 다음과 같이 입력합니다.

   ```
   public-html/index.html
   ```
**중요**  
동일한 이름의 폴더를 만들려면 `public-html/` 접두사를 포함해야 합니다. `index.html`이 폴더에 있을 것으로 예상됩니다.

1. 다음 코드를 텍스트 상자에 입력합니다.

   ```
   <html>
     <head>
       <title>Hello World</title>
       <style>
         body {
         background-color: black;
         text-align: center;
         color: white;
         font-family: Arial, Helvetica, sans-serif;
         }  
       </style>
     </head>
     <body>
       <h1>Hello World</h1>
     </body>
   </html>
   ```

1. **커밋**을 선택한 다음 **커밋**을 다시 선택합니다.

   `index.html`은 `public-html` 폴더의 리포지토리에 추가됩니다.

### Dockerfile
<a name="deploy-tut-ecs-source-files-dockerfile"></a>

Dockerfile은 사용할 기본 Docker 이미지와 적용할 Docker 명령을 설명합니다. Dockerfile에 대한 자세한 내용은 [Dockerfile 참조](https://docs.docker.com/engine/reference/builder/)를 참조하세요.

여기에 지정된 Dockerfile은 Apache 2.4 기본 이미지(`httpd`)를 사용함을 나타냅니다. 또한 `index.html` 소스 파일을 웹 페이지를 제공하는 Apache 서버의 폴더에 복사하는 방법도 포함되어 있습니다. Dockerfile의 `EXPOSE` 지침은 컨테이너가 포트 80에서 수신 중임을 Docker에게 알립니다.

**Dockerfile을 추가하려면**

1. 소스 리포지토리에서 **파일 생성**을 선택합니다.

1. **파일 이름**에 다음과 같이 입력합니다.

   ```
   Dockerfile
   ```

   파일 확장자는 제외합니다.
**중요**  
Dockerfile은 리포지토리의 루트 폴더에 있어야 합니다. 워크플로의 `Docker build` 명령은 해당 파일이 있을 것으로 예상합니다.

1. 다음 코드를 텍스트 상자에 입력합니다.

   ```
   FROM httpd:2.4
   COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html
   EXPOSE 80
   ```

1. **커밋**을 선택한 다음 **커밋**을 다시 선택합니다.

   Dockerfile이 리포지토리에 추가됩니다.

### taskdef.json
<a name="deploy-tut-ecs-source-files-taskdef"></a>

이 단계에서 추가하는 `taskdef.json` 파일은 [2단계: Amazon ECS에 자리 표시자 애플리케이션 배포](#deploy-tut-ecs-placeholder)에서 이미 지정한 파일과 동일하며 다음과 같은 차이점이 있습니다.

`image:` 필드(`httpd:2.4`)에 하드코딩된 Docker 이미지 이름을 지정하는 대신, 여기서 태스크 정의는 몇 가지 변수를 사용하여 이미지(`$REPOSITORY_URI` 및 `$IMAGE_TAG`)를 나타냅니다. 이러한 변수는 이후 단계에서 워크플로를 실행할 때 워크플로의 빌드 작업에서 생성된 실제 값으로 대체됩니다.

태스크 정의 파라미터에 대한 자세한 정보는 *Amazon Elastic Container Service 개발자 안내서*의 [태스크 정의 파라미터](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html)를 참조하세요.

**taskdef.json 파일을 추가하려면**

1. 소스 리포지토리에서 **파일 생성**을 선택합니다.

1. **파일 이름**에 다음과 같이 입력합니다.

   ```
   taskdef.json
   ```

1. 다음 코드를 텍스트 상자에 입력합니다.

   ```
   {
       "executionRoleArn": "arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role",
       "containerDefinitions": [
           {
               "name": "codecatalyst-ecs-container",
               # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced 
               # by the workflow at build time (see the build action in the 
               # workflow)
               "image": $REPOSITORY_URI:$IMAGE_TAG,
               "essential": true,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ]
           }
       ],
       "requiresCompatibilities": [
           "FARGATE"
       ],
       "networkMode": "awsvpc",
       "cpu": "256",
       "memory": "512",
       "family": "codecatalyst-ecs-task-def"
   }
   ```

   앞의 코드에서

   *arn:aws:iam::account\$1ID:role/codecatalyst-ecs-task-execution-role*

   [태스크 실행 역할을 생성하는 방법](#deploy-tut-ecs-create-task-execution-role)에서 기록한 태스크 실행 역할의 ARN으로 바꿉니다.

1. **커밋**을 선택한 다음 **커밋**을 다시 선택합니다.

   `taskdef.json` 파일이 리포지토리에 추가됩니다.

## 8단계: 워크플로 생성 및 실행
<a name="deploy-tut-ecs-workflow"></a>

이 단계에서는 소스 파일을 가져와 Docker 이미지로 빌드한 다음 Amazon ECS 클러스터에 이미지를 배포하는 워크플로를 생성합니다. 이 배포는 기존 Apache 자리 표시자 애플리케이션을 대체합니다.

워크플로는 순차적으로 실행되는 다음 구성 요소로 구성됩니다.
+ 트리거 - 이 트리거는 소스 리포지토리에 변경 사항을 푸시할 때 워크플로 실행을 자동으로 시작합니다. 트리거에 대한 자세한 내용은 [트리거를 사용하여 워크플로 실행 자동 시작](workflows-add-trigger.md) 주제를 참조하세요.
+ 빌드 작업(`BuildBackend`) - 트리거 시 작업은 Dockerfile을 사용하여 Docker 이미지를 빌드하고 Amazon ECR에 이미지를 푸시합니다. 빌드 작업은 또한 `taskdef.json`를 올바른 `image` 필드 값으로 업데이트한 다음 이 파일의 출력 아티팩트를 생성합니다. 이 아티팩트는 다음 배포 작업의 입력으로 사용됩니다.

  빌드 작업에 대한 자세한 내용은 [워크플로로 빌드하기](build-workflow-actions.md) 섹션을 참조하세요.
+ 배포 작업(`DeployToECS`) - 빌드 작업이 완료되면 배포 작업은 빌드 작업(`TaskDefArtifact`)에서 생성된 출력 아티팩트를 찾고, 그 안에서 `taskdef.json`을 찾아 Amazon ECS 서비스에 등록합니다. 그런 다음 Amazon ECS 서비스는 `taskdef.json` 파일의 지침에 따라 Amazon ECS 클러스터 내에서 Amazon ECS 작업 및 연결된 Docker 컨테이너를 실행합니다.

**워크플로 생성**

1. CodeCatalyst 콘솔의 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. **워크플로 생성**을 선택합니다.

1. **소스 리포지토리**에서 `codecatalyst-ecs-source-repository`을 선택합니다.

1. **브랜치**에서 `main`을 선택합니다.

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

1. YAML 샘플 코드를 삭제합니다.

1. 다음 YAML 코드를 추가합니다.
**참고**  
다음 YAML 코드에서 원하는 경우 `Connections:` 섹션을 생략할 수 있습니다. 이 섹션을 생략하는 경우 환경의 **기본 IAM 역할** 필드에 지정된 역할에 [5단계: CodeCatalyst에 AWS 역할 추가](#deploy-tut-ecs-import-roles)에 설명된 두 역할의 권한 및 신뢰 정책이 포함되어 있는지 확인해야 합니다. 기본 IAM 역할이 있는 환경 설정에 대한 자세한 내용은 [환경 생성](deploy-environments-creating-environment.md) 섹션을 참조하세요.

   ```
   Name: codecatalyst-ecs-workflow
   SchemaVersion: 1.0
   
   Triggers:
     - Type: PUSH
       Branches:
         - main
   Actions:
     BuildBackend:
       Identifier: aws/build@v1
       Environment:
         Name: codecatalyst-ecs-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-ecs-build-role
       Inputs:
         Sources:
           - WorkflowSource
         Variables:
           - Name: REPOSITORY_URI
             Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
           - Name: IMAGE_TAG
             Value: ${WorkflowSource.CommitId}
       Configuration:
         Steps:
           #pre_build:
           - Run: echo Logging in to Amazon ECR...
           - Run: aws --version
           - Run: aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com
           #build:
           - Run: echo Build started on `date`
           - Run: echo Building the Docker image...
           - Run: docker build -t $REPOSITORY_URI:latest .
           - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
           #post_build:
           - Run: echo Build completed on `date`
           - Run: echo Pushing the Docker images...
           - Run: docker push $REPOSITORY_URI:latest
           - Run: docker push $REPOSITORY_URI:$IMAGE_TAG
           # Replace the variables in taskdef.json
           - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g"
           - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g"
           - Run: cat taskdef.json
           # The output artifact will be a zip file that contains a task definition file.
       Outputs:
         Artifacts:
           - Name: TaskDefArtifact
             Files: 
               - taskdef.json
     DeployToECS:
       DependsOn: 
         - BuildBackend
       Identifier: aws/ecs-deploy@v1
       Environment:
         Name: codecatalyst-ecs-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-ecs-deploy-role
       Inputs:
         Sources: []
         Artifacts:
           - TaskDefArtifact
       Configuration:
         region: us-west-2
         cluster: codecatalyst-ecs-cluster
         service: codecatalyst-ecs-service
         task-definition: taskdef.json
   ```

   앞의 코드에서
   + *codecatalyst-ecs-environment* 인스턴스 두 개를 모두 [사전 조건](#deploy-tut-ecs-prereqs)에서 생성한 환경 이름으로 바꿉니다.
   + *codecatalyst-account-connection* 인스턴스 두 개를 모두 계정 연결의 표시 이름으로 바꿉니다. 표시 이름은 숫자일 수 있습니다. 자세한 내용은 [5단계: CodeCatalyst에 AWS 역할 추가](#deploy-tut-ecs-import-roles) 섹션을 참조하세요.
   + *codecatalyst-ecs-build-role*을 [4단계: AWS 역할 생성](#deploy-tut-ecs-build-deploy-roles)에서 생성한 빌드 역할 이름으로 바꿉니다.
   + *111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo*(`Value:` 속성 내)를 [3단계: Amazon ECR 이미지 리포지토리 생성](#deploy-tut-ecs-ecr)에서 생성한 Amazon ECR 리포지토리의 URI로 바꿉니다.
   + *111122223333.dkr.ecr.us-west-2.amazonaws.com*(`Run: aws ecr` 명령 내)을 이미지 접미사(`/codecatalyst-ecs-image-repo`) 제외 Amazon ECR 리포지토리의 URI로 바꿉니다.
   + *codecatalyst-ecs-deploy-role*을 [4단계: AWS 역할 생성](#deploy-tut-ecs-build-deploy-roles)에서 생성한 배포 역할의 이름으로 바꿉니다.
   +  AWS 리전 코드가 있는 *us-west-2*의 두 인스턴스. 리전 코드 목록은 *AWS 일반 참조*의 [리전 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)를 참조하세요.
**참고**  
빌드 및 배포 역할을 생성하지 않기로 결정한 경우 *codecatalyst-ecs-build-role* 및 *codecatalyst-ecs-deploy-role*을 `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할 이름으로 바꿉니다. 이에 대한 자세한 내용은 [4단계: AWS 역할 생성](#deploy-tut-ecs-build-deploy-roles) 섹션을 참조하세요.
**작은 정보**  
이전 워크플로 코드에 표시된 `find` 및 `sed` 명령을 사용하여 리포지토리 및 이미지 이름을 업데이트하는 대신 이 용도로 **Amazon ECS 작업 정의 렌더링** 작업을 사용할 수 있습니다. 자세한 내용은 [Amazon ECS 작업 정의 수정](render-ecs-action.md) 섹션을 참조하세요.

1. (선택 사항) 커밋하기 전에 YAML 코드가 유효한지 확인하려면 **검증**을 선택합니다.

1. **커밋**을 선택합니다.

1. **워크플로 커밋** 대화 상자에서 다음을 입력합니다.

   1. **커밋 메시지**에서 텍스트를 제거하고 다음을 입력합니다.

      ```
      Add first workflow
      ```

   1. **리포지토리**에서 `codecatalyst-ecs-source-repository`를 선택합니다.

   1. **브랜치 이름**에서 기본을 선택합니다.

   1. **커밋**을 선택합니다.

   이제 워크플로를 생성했습니다. 워크플로 상단에 정의된 트리거로 인해 워크플로 실행이 자동으로 시작됩니다. 특히 `workflow.yaml` 파일을 소스 리포지토리에 커밋(및 푸시)할 때 트리거가 워크플로 실행을 시작했습니다.

**진행 중인 워크플로 실행을 보려면**

1. CodeCatalyst 콘솔의 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. 방금 생성한 `codecatalyst-ecs-workflow` 워크플로를 선택합니다.

1. **BuildBackend**를 선택하여 빌드 진행 상황을 확인합니다.

1. **DeployToECS**를 선택하여 배포 진행 상황을 확인합니다.

   실행 세부 정보 보기에 대한 자세한 내용은 [워크플로 실행 상태 및 세부 정보 보기](workflows-view-run.md)를 참조하세요.

**배포를 확인하려면**

1. [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)에서 Amazon ECS 클래식 콘솔을 엽니다.

1. `codecatalyst-ecs-cluster` 클러스터를 선택합니다.

1. **작업** 탭을 선택합니다.

1. 세 가지 태스크 중 하나를 선택합니다.

1. **퍼블릭 IP** 필드에서 **개방형 주소**를 선택합니다.

   브라우저에 "Hello World" 페이지가 나타나 Amazon ECS 서비스가 애플리케이션을 성공적으로 배포했음을 나타냅니다.

## 9단계: 소스 파일 변경
<a name="deploy-tut-ecs-change"></a>

이 섹션에서는 소스 리포지토리의 `index.html` 파일을 변경합니다. 이 변경으로 인해 워크플로는 새 Docker 이미지를 빌드하고 커밋 ID로 태그를 지정하고 Amazon ECR에 푸시한 다음 Amazon ECS에 배포합니다.

**index.html을 변경하려면**

1. CodeCatalyst 콘솔의 탐색 창에서 **코드**를 선택한 다음 **소스 리포지토리**를 선택하고 `codecatalyst-ecs-source-repository` 리포지토리를 선택합니다.

1. [`public-html`]를 선택한 다음 [`index.html`]를 선택합니다.

   `index.html`의 내용이 나타납니다.

1. **편집**을 선택합니다.

1. 14행에서 `Hello World` 텍스트를 `Tutorial complete!`로 변경합니다.

1. **커밋**을 선택한 다음 **커밋**을 다시 선택합니다.

   커밋으로 인해 새 워크플로 실행이 시작됩니다.

1. (선택 사항) 소스 리포지토리의 메인 페이지로 이동하여 **커밋 보기**를 선택한 다음 `index.html` 변경 사항에 대한 커밋 ID를 기록해 둡니다.

1. 배포 진행 상황 보기:

   1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

   1. 최신 실행을 보려면 `codecatalyst-ecs-workflow`를 선택합니다.

   1. **BuildBackend** 및 **DeployToECS**를 선택하여 워크플로 실행 진행 상황을 확인합니다.

1. 다음과 같이 애플리케이션이 업데이트되었는지 확인합니다.

   1. [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)에서 Amazon ECS 클래식 콘솔을 엽니다.

   1. `codecatalyst-ecs-cluster` 클러스터를 선택합니다.

   1. **작업** 탭을 선택합니다.

   1. 세 가지 태스크 중 하나를 선택합니다.

   1. **퍼블릭 IP** 필드에서 **개방형 주소**를 선택합니다.

      `Tutorial complete!` 페이지가 나타납니다.

1. (선택 사항)에서 Amazon ECR 콘솔로 AWS전환하고 새 Docker 이미지에 6단계의 커밋 ID로 태그가 지정되었는지 확인합니다.

## 정리
<a name="deploy-tut-ecs-cleanup"></a>

요금이 부과되지 않도록 이 자습서에서 사용하는 파일과 서비스를 정리합니다.

에서 다음 순서로 AWS Management Console정리합니다.

1. Amazon ECS에서 다음을 수행합니다.

   1. `codecatalyst-ecs-service`을 삭제합니다.

   1. `codecatalyst-ecs-cluster`을 삭제합니다.

   1. `codecatalyst-ecs-task-definition` 등록을 취소합니다.

1. Amazon ECR에서 `codecatalyst-ecs-image-repo`를 삭제합니다.

1. Amazon EC2에서 `codecatalyst-ecs-security-group`를 삭제합니다.

1. IAM Identity Center에서 다음을 삭제합니다.

   1. `CodeCatalystECSUser`

   1. `CodeCatalystECSPermissionSet`

CodeCatalyst 콘솔에서 다음과 같이 정리합니다.

1. `codecatalyst-ecs-workflow`를 삭제합니다.

1. `codecatalyst-ecs-environment`를 삭제합니다.

1. `codecatalyst-ecs-source-repository`를 삭제합니다.

1. `codecatalyst-ecs-project`를 삭제합니다.

이 자습서에서는 CodeCatalyst 워크플로와 Amazon ECS에 배포 작업을 사용하여 **Amazon ECS 서비스에 애플리케이션을 배포**하는 방법을 배웠습니다.

# 'Amazon ECS에 배포' 작업 추가
<a name="deploy-action-ecs-adding"></a>

다음 지침을 사용하여 워크플로에 **Amazon ECS에 배포** 작업을 추가합니다.

------
#### [ Visual ]

**시각적 편집기를 사용하여 'Amazon ECS에 배포' 작업을 추가하려면**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/)에서 CodeCatalyst 콘솔을 엽니다.

1. 프로젝트를 선택합니다.

1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. 워크플로의 이름을 선택합니다. 소스 리포지토리 또는 워크플로가 정의된 브랜치 이름을 기준으로 필터링하거나, 워크플로 이름 또는 상태를 기준으로 필터링할 수 있습니다.

1. **편집**을 선택합니다.

1. **비주얼**을 선택합니다.

1. 왼쪽 상단에서 **\$1 작업**을 선택하여 작업 카탈로그를 엽니다.

1. 드롭다운 목록에서 **Amazon CodeCatalyst**를 선택합니다.

1. **Amazon ECS에 배포** 작업을 검색하고 다음 중 하나를 수행합니다.
   + 더하기 기호(**\$1**)를 선택하여 워크플로 다이어그램에 작업을 추가하고 구성 창을 엽니다.

     또는
   + **Amazon ECS에 배포**를 선택합니다. 작업 세부 정보 대화 상자가 나타납니다. 이 대화 상자에서 다음을 수행합니다.
     + (선택 사항) **다운로드**를 선택하여 [작업의 소스 코드를 봅니다](workflows-view-source.md#workflows-view-source.title).
     + **워크플로에 추가**를 선택하여 워크플로 다이어그램에 작업을 추가하고 구성 창을 엽니다.

1. **입력** 및 **구성** 탭에서 필요에 따라 필드를 작성합니다. 각 필드의 설명은 ['Amazon ECS에 배포' 작업 YAML](deploy-action-ref-ecs.md) 섹션을 참조하세요. 이 참조는 YAML 및 시각적 편집기 모두에 나타나는 각 필드(및 해당 YAML 속성 값)에 대한 자세한 정보를 제공합니다.

1. (선택 사항) 커밋하기 전에 워크플로의 YAML 코드를 검증하려면 **검증**을 선택합니다.

1. **커밋**을 선택하고 커밋 메시지를 입력한 다음 **커밋**을 다시 선택합니다.

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

**YAML 편집기를 사용하여 'Amazon ECS에 배포' 작업을 추가하려면**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/)에서 CodeCatalyst 콘솔을 엽니다.

1. 프로젝트를 선택합니다.

1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. 워크플로의 이름을 선택합니다. 소스 리포지토리 또는 워크플로가 정의된 브랜치 이름을 기준으로 필터링하거나, 워크플로 이름 또는 상태를 기준으로 필터링할 수 있습니다.

1. **편집**을 선택합니다.

1. **YAML**을 선택합니다.

1. 왼쪽 상단에서 **\$1 작업**을 선택하여 작업 카탈로그를 엽니다.

1. 드롭다운 목록에서 **Amazon CodeCatalyst**를 선택합니다.

1. **Amazon ECS에 배포** 작업을 검색하고 다음 중 하나를 수행합니다.
   + 더하기 기호(**\$1**)를 선택하여 워크플로 다이어그램에 작업을 추가하고 구성 창을 엽니다.

     또는
   + **Amazon ECS에 배포**를 선택합니다. 작업 세부 정보 대화 상자가 나타납니다. 이 대화 상자에서 다음을 수행합니다.
     + (선택 사항) **다운로드**를 선택하여 [작업의 소스 코드를 봅니다](workflows-view-source.md#workflows-view-source.title).
     + **워크플로에 추가**를 선택하여 워크플로 다이어그램에 작업을 추가하고 구성 창을 엽니다.

1. 필요에 따라 YAML 코드의 속성을 수정합니다. 사용 가능한 각 속성에 대한 설명은 ['Amazon ECS에 배포' 작업 YAML](deploy-action-ref-ecs.md)에서 볼 수 있습니다.

1. (선택 사항) 커밋하기 전에 워크플로의 YAML 코드를 검증하려면 **검증**을 선택합니다.

1. **커밋**을 선택하고 커밋 메시지를 입력한 다음 **커밋**을 다시 선택합니다.

------

# 'Amazon ECS에 배포' 변수
<a name="deploy-action-ecs-variables"></a>

**Amazon ECS에 배포** 작업은 런타임에 다음 변수를 생성하고 설정합니다. 이를 *사전 정의된 변수*라고 합니다.

워크플로에서 이러한 변수를 참조하는 방법에 대한 자세한 내용은 [사전 정의된 변수 사용](workflows-using-predefined-variables.md) 섹션을 참조하세요.


| Key(키) | 값 | 
| --- | --- | 
|  클러스터  |  워크플로 실행 중에 배포된 Amazon ECS 클러스터의 이름입니다. 예시: `codecatalyst-ecs-cluster`  | 
|  deployment-platform  |  배포 플랫폼의 이름입니다. `AWS:ECS`로 하드코딩되었습니다.  | 
|  서비스  |  워크플로 실행 중에 에 배포된 Amazon ECS 서비스의 이름입니다. 예시: `codecatalyst-ecs-service`  | 
|  task-definition-arn  |  워크플로 실행 중에 등록된 작업 정의의 Amazon 리소스 이름(ARN)입니다. 예시: `arn:aws:ecs:us-west-2:111122223333:task-definition/codecatalyst-task-def:8`위 예시의 `:8`은 등록된 리비전을 나타냅니다.  | 
|  deployment-url  |  워크플로 실행과 연결된 Amazon ECS 배포의 세부 정보를 볼 수 있는 Amazon ECS 콘솔의 **이벤트** 탭에 대한 링크입니다. 예시: `https://console.aws.amazon.com/ecs/home?region=us-west-2#/clusters/codecatalyst-ecs-cluster/services/codecatalyst-ecs-service/events`  | 
|  리전  |  워크플로 실행 중에에 배포 AWS 리전 된의 리전 코드입니다. 예시: `us-west-2`  | 

# 'Amazon ECS에 배포' 작업 YAML
<a name="deploy-action-ref-ecs"></a>

다음은 **Amazon ECS에 배포** 작업의 YAML 정의입니다. 이러한 작업 사용 방법을 배우려면 [워크플로를 사용하여 Amazon ECS에 배포](deploy-action-ecs.md) 섹션을 참조하세요.

이 작업 정의는 더 광범위한 워크플로 정의 파일 내의 섹션으로 존재합니다. 이 파일에 대한 자세한 내용은 [워크플로 YAML 정의](workflow-reference.md)을 참조합니다.

**참고**  
이어지는 대부분의 YAML 속성에는 시각적 편집기에 해당 UI 요소가 있습니다. UI 요소를 찾으려면 **Ctrl\$1F**를 사용합니다. 요소가 연결된 YAML 속성과 함께 나열됩니다.

```
# The workflow definition starts here.
# See 최상위 속성 for details.
        
Name: MyWorkflow
SchemaVersion: 1.0 
Actions:

# The action definition starts here.   
  ECSDeployAction\$1nn: 
    Identifier: aws/ecs-deploy@v1
    DependsOn:
      - build-action
    Compute:  
      Type: EC2 | Lambda
      Fleet: fleet-name
    Timeout: timeout-minutes
    Environment:
      Name: environment-name
      Connections:
        - Name: account-connection-name
          Role: iam-role-name
    Inputs:
      # Specify a source or an artifact, but not both.
      Sources:
        - source-name-1
      Artifacts:
        - task-definition-artifact
    Configuration: 
      region: us-east-1 
      cluster: ecs-cluster
      service: ecs-service
      task-definition: task-definition-path
      force-new-deployment: false|true
      codedeploy-appspec: app-spec-file-path
      codedeploy-application: application-name
      codedeploy-deployment-group: deployment-group-name
      codedeploy-deployment-description: deployment-description
```

## ECSDeployAction
<a name="deploy.action.ecs.name"></a>

(필수)

작업 이름을 지정합니다. 워크플로 내의 모든 작업 이름은 고유해야 합니다. 작업 이름은 영숫자 문자(a-z, A-Z, 0-9), 하이픈(-) 및 밑줄(\$1)로 제한됩니다. 스페이스은 허용되지 않습니다. 작업 이름에서 특수 문자와 공백을 활성화하는 데 따옴표를 사용할 수 없습니다.

기본값: `ECSDeployAction_nn`.

해당 UI: 구성 탭/**작업 표시 이름**

## Identifier
<a name="deploy.action.ecs.identifier"></a>

(*ECSDeployAction*/**Identifier**)

(필수)

작업을 식별합니다. 버전을 변경하려는 경우가 아니면 이 속성을 변경하지 마세요. 자세한 내용은 [사용할 작업 버전 지정](workflows-action-versions.md) 섹션을 참조하세요.

기본값: `aws/ecs-deploy@v1`.

해당 UI: 워크플로 다이어그램/ECSDeployAction\$1nn/**aws/ecs-deploy@v1** 레이블

## DependsOn
<a name="deploy.action.ecs.dependson"></a>

(*ECSDeployAction*/**DependsOn**)

(선택 사항)

이 작업을 실행하기 위해 성공적으로 실행해야 하는 작업, 작업 그룹 또는 게이트를 지정합니다.

'depends on' 함수에 대한 자세한 내용은 [작업 순서 지정](workflows-depends-on.md) 섹션을 참조하세요.

해당 UI: 입력 탭/**의존 - 선택 사항**

## Compute
<a name="deploy.action.ecs.computename"></a>

(*ECSDeployAction*/**Compute**)

(선택 사항)

워크플로 작업을 실행하는 데 사용되는 컴퓨팅 엔진입니다. 워크플로 수준 또는 작업 수준에서 컴퓨팅을 지정할 수 있지만 둘 다 지정할 수는 없습니다. 워크플로 수준에서 지정하면 컴퓨팅 구성이 워크플로에 정의된 모든 작업에 적용됩니다. 워크플로 수준에서는 동일한 인스턴스에서 여러 작업을 실행할 수도 있습니다. 자세한 내용은 [작업 간에 컴퓨팅 공유](compute-sharing.md) 섹션을 참조하세요.

해당 UI: *없음*

## Type
<a name="deploy.action.ecs.computetype"></a>

(*ECSDeployAction*/Compute/**Type**)

([Compute](#deploy.action.ecs.computename) 포함 시 필수)

컴퓨팅 엔진의 유형입니다. 다음 값 중 하나를 사용할 수 있습니다.
+ **EC2**(시각 편집기) 또는 `EC2`(YAML 편집기)

  작업 실행 중 유연성을 위해 최적화되었습니다.
+ **Lambda**(시각 편집기) 또는 `Lambda`(YAML 편집기)

  작업 시작 속도를 최적화했습니다.

컴퓨팅 유형에 대한 자세한 정보는 [컴퓨팅 유형](workflows-working-compute.md#compute.types)을 참고하세요.

해당 UI: 구성 탭/고급 - 선택 사항/**컴퓨팅 유형**

## Fleet
<a name="deploy.action.ecs.computefleet"></a>

(*ECSDeployAction*/Compute/**Fleet**)

(선택 사항)

워크플로 또는 워크플로 작업을 실행할 시스템 또는 플릿을 지정합니다. 온디맨드 플릿의 경우 작업이 시작되면 워크플로가 필요한 리소스를 프로비저닝하고 작업이 완료되면 시스템이 파괴됩니다. 온디맨드 플릿의 예시: `Linux.x86-64.Large`, `Linux.x86-64.XLarge`. 온디맨드 플릿에 대한 자세한 내용은 [온디맨드 플릿 속성](workflows-working-compute.md#compute.on-demand) 섹션을 참조하세요.

프로비저닝된 플릿을 사용하면 워크플로 작업을 실행하도록 전용 시스템 세트를 구성할 수 있습니다. 이러한 시스템은 유휴 상태로 유지되므로 작업을 즉시 처리할 수 있습니다. 프로비저닝된 플릿에 대한 자세한 내용은 [프로비저닝된 플릿 속성](workflows-working-compute.md#compute.provisioned-fleets) 섹션을 참조하세요.

`Fleet` 생략 시 기본값은 `Linux.x86-64.Large`입니다.

해당 UI: 구성 탭/고급 - 선택적/**컴퓨팅 플릿**

## Timeout
<a name="deploy.action.ecs.timeout"></a>

(*ECSDeployAction*/**Timeout**)

(선택 사항)

CodeCatalyst가 작업을 종료하기 전에 작업을 실행할 수 있는 시간을 분(YAML 편집기) 또는 시간 및 분(시각적 편집기) 단위로 지정합니다. 최소값은 5분이고 최대값은 [CodeCatalyst의 워크플로 할당량](workflows-quotas.md)에 설명되어 있습니다. 기본 제한 시간은 최대 제한 시간과 동일합니다.

해당 UI: 구성 탭/**제한 시간 - 선택 사항 **

## Environment
<a name="deploy.action.ecs.environment"></a>

(*ECSDeployAction*/**Environment**)

(필수)

작업에 사용할 CodeCatalyst 환경을 지정합니다. 작업은 선택한 환경에 지정된 AWS 계정 및 선택적 Amazon VPC에 연결됩니다. 작업은 환경에 지정된 기본 IAM 역할을 사용하여에 연결하고 [Amazon VPC 연결](https://docs.aws.amazon.com/codecatalyst/latest/adminguide/managing-vpcs.add.html)에 지정된 IAM 역할을 AWS 계정사용하여 Amazon VPC에 연결합니다.

**참고**  
기본 IAM 역할에 작업에 필요한 권한이 없는 경우 다른 역할을 사용하도록 작업을 구성할 수 있습니다. 자세한 내용은 [작업의 IAM 역할 변경](deploy-environments-switch-role.md) 섹션을 참조하세요.

환경에 대한 자세한 내용은 [AWS 계정 및 VPCs에 배포](deploy-environments.md) 및 [환경 생성](deploy-environments-creating-environment.md) 섹션을 참조하세요.

해당 UI: 구성 탭/**환경**

## Name
<a name="deploy.action.ecs.environment.name"></a>

(*ECSDeployAction*/Environment/**Name**)

([Environment](#deploy.action.ecs.environment) 포함 시 필수)

작업과 연결하려는 기존 환경의 이름을 지정합니다.

해당 UI: 구성 탭/**환경**

## Connections
<a name="deploy.action.ecs.environment.connections"></a>

(*ECSDeployAction*/Environment/**Connections**)

(최신 버전의 작업에서는 선택 사항, 이전 버전에서는 필수)

작업과 연결할 계정 연결을 지정합니다. `Environment`에서 계정 연결을 최대 1개까지 지정할 수 있습니다.

계정 연결을 지정하지 않는 경우:
+ 작업은 CodeCatalyst 콘솔의 환경에 지정된 AWS 계정 연결 및 기본 IAM 역할을 사용합니다. 환경에 계정 연결 및 기본 IAM 역할을 추가하는 방법에 대한 자세한 내용은 [환경 생성](deploy-environments-creating-environment.md) 섹션을 참조하세요.
+ 기본 IAM 역할에는 작업에 필요한 정책 및 권한이 포함되어야 합니다. 이러한 정책 및 권한이 무엇인지 확인하려면 작업의 YAML 정의 설명서에서 **역할** 속성에 대한 설명을 참조하세요.

계정 연결에 대한 자세한 정보는 [연결된를 사용하여 AWS 리소스에 대한 액세스 허용 AWS 계정](ipa-connect-account.md) 섹션을 참조하세요. 환경에 계정 연결을 추가하는 방법에 대한 자세한 내용은 [환경 생성](deploy-environments-creating-environment.md) 섹션을 참조하세요.

해당 UI: 작업 버전에 따라 다음 중 하나:
+ (최신 버전) 구성 탭/환경/*내 환경*의 내용/점 3개 메뉴/**역할 전환**
+ (이전 버전) 구성 탭/'환경/계정/역할'/**AWS 계정 연결**

## Name
<a name="deploy.action.ecs.environment.connections.name"></a>

(*ECSDeployAction*/Environment/Connections/**Name**)

([Connections](#deploy.action.ecs.environment.connections) 포함 시 필수)

계정 연결의 이름을 지정합니다.

해당 UI: 작업 버전에 따라 다음 중 하나:
+ (최신 버전) 구성 탭/환경/*내 환경*의 내용/점 3개 메뉴/**역할 전환**
+ (이전 버전) 구성 탭/'환경/계정/역할'/**AWS 계정 연결**

## Role
<a name="deploy.action.ecs.environment.connections.role"></a>

(*ECSDeployAction*/Environment/Connections/**Role**)

([Connections](#deploy.action.ecs.environment.connections) 포함 시 필수)

**Amazon ECS에 배포** 작업이 AWS에 액세스하는 데 사용하는 IAM 역할의 이름을 지정합니다. [CodeCatalyst 스페이스에 역할을 추가](ipa-connect-account-addroles.md)했고 역할에 다음 정책이 포함되어 있는지 확인합니다.

IAM 역할을 지정하지 않으면 작업은 CodeCatalyst 콘솔의 [환경](deploy-environments.md)에 나열된 기본 IAM 역할을 사용합니다. 환경에서 기본 역할을 사용하는 경우 다음 정책이 있는지 확인합니다.
+ 다음 권한 정책:
**주의**  
다음 정책에 표시된 대로 권한을 제한합니다. 더 광범위한 권한을 가진 역할을 사용하면 보안 위험이 발생할 수 있습니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
      "Action":[
        "ecs:DescribeServices",
        "ecs:CreateTaskSet",
        "ecs:DeleteTaskSet",
        "ecs:ListClusters",
        "ecs:RegisterTaskDefinition",
        "ecs:UpdateServicePrimaryTaskSet",
        "ecs:UpdateService",
        "elasticloadbalancing:DescribeTargetGroups",
        "elasticloadbalancing:DescribeListeners",
        "elasticloadbalancing:ModifyListener",
        "elasticloadbalancing:DescribeRules",
        "elasticloadbalancing:ModifyRule",
        "lambda:InvokeFunction",
        "lambda:ListFunctions",
        "cloudwatch:DescribeAlarms",
        "sns:Publish",
        "sns:ListTopics", 
        "s3:GetObject",
        "s3:GetObjectVersion",
        "codedeploy:CreateApplication", 
        "codedeploy:CreateDeployment", 
        "codedeploy:CreateDeploymentGroup", 
        "codedeploy:GetApplication", 
        "codedeploy:GetDeployment", 
        "codedeploy:GetDeploymentGroup", 
        "codedeploy:ListApplications", 
        "codedeploy:ListDeploymentGroups", 
        "codedeploy:ListDeployments", 
        "codedeploy:StopDeployment", 
        "codedeploy:GetDeploymentTarget", 
        "codedeploy:ListDeploymentTargets", 
        "codedeploy:GetDeploymentConfig", 
        "codedeploy:GetApplicationRevision", 
        "codedeploy:RegisterApplicationRevision", 
        "codedeploy:BatchGetApplicationRevisions", 
        "codedeploy:BatchGetDeploymentGroups", 
        "codedeploy:BatchGetDeployments", 
        "codedeploy:BatchGetApplications", 
        "codedeploy:ListApplicationRevisions", 
        "codedeploy:ListDeploymentConfigs", 
        "codedeploy:ContinueDeployment"           
     ],
     "Resource":"*",
     "Effect":"Allow"
  },{"Action":[
        "iam:PassRole"
     ],
     "Effect":"Allow",
     "Resource":"*",
     "Condition":{"StringLike":{"iam:PassedToService":[
              "ecs-tasks.amazonaws.com",
              "codedeploy.amazonaws.com"
           ]
        }
     }
  }]
  }
  ```

------
**참고**  
역할을 처음 사용할 때는 리소스 정책 설명에서 다음 와일드카드를 사용한 다음 사용 가능한 리소스 이름으로 정책의 범위를 좁힙니다.  

  ```
  "Resource": "*"
  ```
+ 다음 사용자 지정 신뢰 정책:

**참고**  
원하는 경우 이 작업에서 `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할을 사용할 수 있습니다. 이에 대한 자세한 내용은 [계정 및 스페이스의 **CodeCatalystWorkflowDevelopmentRole-*spaceName*** 역할 생성](ipa-iam-roles.md#ipa-iam-roles-service-create) 섹션을 참조하세요. `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할에 보안 위험을 초래할 수 있는 전체 액세스 권한이 있음을 이해합니다. 보안에 대한 우려가 적은 자습서 및 시나리오에서만 이 역할을 사용하는 것이 좋습니다.

해당 UI: 작업 버전에 따라 다음 중 하나:
+ (최신 버전) 구성 탭/환경/*내 환경*의 내용/점 3개 메뉴/**역할 전환**
+ (이전 버전) 구성 탭/'환경/계정/역할'/**역할**

## Inputs
<a name="deploy.action.ecs.inputs"></a>

(*ECSDeployAction*/**Inputs**)

(선택 사항)

이 `Inputs` 섹션에서는 워크플로 실행 중 `ECSDeployAction`에 필요한 데이터를 정의합니다.

**참고**  
**Amazon ECS에 배포** 작업당 하나의 입력(소스 또는 아티팩트)만 허용됩니다.

해당 UI: **입력** 탭

## Sources
<a name="deploy.action.ecs.inputs.sources"></a>

(*ECSDeployAction*/Inputs/**Sources**)

(작업 정의 파일이 소스 리포지토리에 저장된 경우 필수)

태스크 정의 파일이 소스 리포지토리에 저장되어 있는 경우 해당 소스 리포지토리의 레이블을 지정합니다. 현재, `WorkflowSource` 레이블만 지원됩니다.

태스크 정의 파일이 소스 리포지토리에 포함되어 있지 않은 경우, 다른 작업에서 생성된 아티팩트에 있어야 합니다.

소스에 대한 자세한 내용은 [워크플로에 소스 리포지토리 연결](workflows-sources.md) 섹션을 참조하세요.

해당 UI: 입력 탭/**소스 - 선택 사항**

## Artifacts - input
<a name="deploy.action.ecs.inputs.artifacts"></a>

(*ECSDeployAction*/Inputs/**Artifacts**)

(작업 정의 파일이 이전 작업의 [출력 아티팩트](workflows-working-artifacts-output.md)에 저장된 경우 필수)

배포하려는 작업 정의 파일이 이전 작업에서 생성된 아티팩트에 포함된 경우 여기에 해당 아티팩트를 지정합니다. 태스크 정의 파일이 아티팩트 내에 포함되어 있지 않은 경우 소스 리포지토리에 있어야 합니다.

예시를 포함해 아티팩트에 대한 자세한 내용은 [작업 간 아티팩트 및 파일 공유](workflows-working-artifacts.md) 섹션을 참조하세요.

해당 UI: 구성 탭/**아티팩트 - 선택 사항**

## Configuration
<a name="deploy.action.ecs.configuration"></a>

(*ECSDeployAction*/**Configuration**)

(필수)

작업의 구성 속성을 정의할 수 있는 섹션입니다.

해당 UI: **구성** 탭

## region
<a name="deploy.action.ecs.region"></a>

(Configuration/**region**)

(필수)

Amazon ECS 클러스터 및 서비스가 상주하는 AWS 리전을 지정합니다. 리전 코드 목록은 *AWS 일반 참조*의 [리전 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)를 참조하세요.

해당 UI: 구성 탭/**리전**

## cluster
<a name="deploy.action.ecs.cluster"></a>

(*ECSDeployAction*/Configuration/**cluster**)

(필수)

기존 Amazon ECS 클러스터의 이름을 지정합니다. **Amazon ECS에 배포** 작업을 수행하면 컨테이너화된 애플리케이션이 이 클러스터에 작업으로 배포됩니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*에서 [클러스터](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html#welcome-clusters)를 참조하세요.

해당 UI: 구성 탭/**클러스터**

## service
<a name="deploy.action.ecs.service"></a>

(*ECSDeployAction*/Configuration/**service**)

(필수)

작업 정의 파일을 인스턴스화할 기존 Amazon ECS 서비스의 이름을 지정합니다. 이 서비스는 `cluster` 필드에 지정된 클러스터 아래에 있어야 합니다. Amazon ECS에 대한 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 서비스](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)를 참조하세요.

해당 UI: 구성 탭/**서비스**

## task-definition
<a name="deploy.action.ecs.task.definition"></a>

(*ECSDeployAction*/Configuration/**task-definition**)

(필수)

기존 작업 정의 파일의 경로를 지정합니다. 파일이 소스 리포지토리에 있는 경우 경로는 소스 리포지토리 루트 폴더를 기준으로 합니다. 파일이 이전 워크플로 작업의 아티팩트에 있는 경우 경로는 아티팩트 루트 폴더를 기준으로 합니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [작업 정의](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html#welcome-task-definitions)를 참조하세요.

해당 UI: 구성 탭/**작업 정의**

## force-new-deployment
<a name="deploy.action.ecs.forcenewdeployment"></a>

(*ECSDeployAction*/Configuration/**force-new-deployment**)

(필수)

활성화된 경우 Amazon ECS 서비스는 서비스 정의 변경 없이 새 배포를 시작할 수 있습니다. 배포를 강제하면 서비스가 현재 실행 중인 모든 작업을 중지하고 새 작업을 시작합니다. 새 배포 강제 적용에 대한 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [서비스 업데이트](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html)를 참조하세요.

기본값: `false`

해당 UI: 구성 탭/**서비스의 새 배포 강제 적용**

## codedeploy-appspec
<a name="deploy.action.ecs.codedeploy.appspec"></a>

(*ECSDeployAction*/Configuration/**codedeploy-appspec**)

(블루/그린 배포를 사용하도록 Amazon ECS 서비스를 구성한 경우 필수, 그렇지 않으면 생략)

기존 CodeDeploy 애플리케이션 사양(AppSpec) 파일의 이름과 경로를 지정합니다. 이 파일은 CodeCatalyst 소스 리포지토리의 루트에 있어야 합니다. AppSpec 파일에 대한 자세한 내용은 *AWS CodeDeploy 사용 설명서*의 [CodeDeploy 애플리케이션 사양(AppSpec) 파일](https://docs.aws.amazon.com/codedeploy/latest/userguide/application-specification-files.html)을 참조하세요.

**참고**  
블루/그린 배포를 수행하도록 Amazon ECS 서비스를 구성한 경우에만 CodeDeploy 정보를 제공합니다. 롤링 업데이트 배포(기본값)의 경우 CodeDeploy 정보를 생략합니다. Amazon ECS 배포에 대해 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 배포 유형](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html)을 참조하세요.

**참고**  
**CodeDeploy** 필드는 시각적 편집기에 숨겨질 수 있습니다. 해당 항목이 표시되도록 하려면 [시각적 편집기에서 CodeDeploy 필드가 누락된 이유는 무엇인가요?](troubleshooting-workflows.md#troubleshooting-workflows-codedeploy) 섹션을 참조하세요.

해당 UI: 구성 탭/**CodeDeploy AppSpec**

## codedeploy-application
<a name="deploy.action.ecs.codedeploy.application"></a>

(*ECSDeployAction*/Configuration/**codedeploy-application**)

(`codedeploy-appspec` 포함 시 필수)

기존 CodeDeploy 애플리케이션의 이름을 지정합니다. CodeDeploy 애플리케이션에 대한 자세한 내용은 *AWS CodeDeploy 사용 설명서*의 [CodeDeploy에서 애플리케이션 작업](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications.html)을 참조하세요.

해당 UI: 구성 탭/**CodeDeploy 애플리케이션**

## codedeploy-deployment-group
<a name="deploy.action.ecs.codedeploy.deploymentgroup"></a>

(*ECSDeployAction*/Configuration/**codedeploy-deployment-group**)

(`codedeploy-appspec` 포함 시 필수)

기존 CodeDeploy 배포 그룹의 이름을 지정합니다. CodeDeploy 배포 그룹에 대한 자세한 내용은 *AWS CodeDeploy 사용 설명서*의 [CodeDeploy에서 배포 그룹 작업](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html)을 참조하세요.

해당 UI: 구성 탭/**CodeDeploy 배포 그룹**

## codedeploy-deployment-description
<a name="deploy.action.ecs.codedeploy.deploymentdescription"></a>

(*ECSDeployAction*/Configuration/**codedeploy-deployment-description**)

(선택 사항)

이 작업에서 생성할 배포에 대한 설명을 지정합니다. 자세한 정보는 *AWS CodeDeploy 사용자 가이드*의 [CodeDeploy에서 배포로 작업](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments.html)을 잠조하세요.

해당 UI: 구성 탭/**CodeDeploy 배포 설명**