

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

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

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

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

이 섹션에서는 CodeCatalyst 워크플로를 사용하여 컨테이너화된 애플리케이션을 Kubernetes 클러스터에 배포하는 방법을 설명합니다. 이렇게 하려면 워크플로에 **Kubernetes 클러스터에 배포** 작업을 추가해야 합니다. 이 작업은 하나 이상의 Kubernetes 매니페스트 파일을 사용하여 Amazon Elastic Kubernetes Service(EKS)에서 설정한 Kubernetes 클러스터에 애플리케이션을 배포합니다. 샘플 매니페스트는 [자습서: Amazon EKS에 애플리케이션 배포](deploy-tut-eks.md)의 [deployment.yaml](deploy-tut-eks.md#deploy-tut-eks-source-files-deployment-yml) 섹션을 참조하세요.

Kubernetes에 대한 자세한 내용은 [Kubernetes 문서](https://kubernetes.io/docs/home/)을 참조하세요.

Amazon EKS에 관한 자세한 내용은 *Amazon EKS 사용 설명서*의 [Amazon EKS란?](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)을 참조하세요.

**Topics**
+ ['Kubernetes 클러스터에 배포' 작업 작동 방식](#deploy-action-eks-howitworks)
+ ['Amazon EKS에 배포' 작업에서 사용되는 런타임 이미지](#deploy-action-eks-runtime)
+ [자습서: Amazon EKS에 애플리케이션 배포](deploy-tut-eks.md)
+ ['Kubernetes 클러스터에 배포' 작업 추가](deploy-action-eks-adding.md)
+ ['Kubernetes 클러스터에 배포' 변수](deploy-action-eks-variables.md)
+ ['Kubernetes 클러스터에 배포' 작업 YAML](deploy-action-ref-eks.md)

## 'Kubernetes 클러스터에 배포' 작업 작동 방식
<a name="deploy-action-eks-howitworks"></a>

**Kubernetes 클러스터에 배포**는 다음과 같이 작동합니다.

1. 런타임 시 작업은 작업이 실행 중인 CodeCatalyst 컴퓨팅 시스템에 Kubernetes `kubectl` 유틸리티를 설치합니다. 작업을 구성할 때 제공한 Amazon EKS 클러스터를 가리키도록 작업이 `kubectl`을 구성합니다. 다음에는 `kubectl apply` 명령을 실행하는 데 `kubectl` 유틸리티가 필요합니다.

1. 이 작업은 *my-manifest.yaml*의 `kubectl apply -f my-manifest.yaml` 명령을 실행하여 애플리케이션을 컨테이너 및 포드 세트로 구성된 클러스터에 배포합니다. 이 명령에 대한 자세한 내용은 *Kubernetes 참조 설명서*의 [kubectl 적용](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply) 주제를 참조하세요.

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

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

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

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

초기 배포가 완료되면 자습서에서 애플리케이션 소스를 변경하도록 지시합니다. 이 변경으로 인해 새 Docker 이미지가 빌드되고 새 개정 정보와 함께 Docker 이미지 리포지토리로 푸시됩니다. 그런 다음 Docker 이미지의 새 개정이 Amazon EKS에 배포됩니다.

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

**Topics**
+ [사전 조건](#deploy-tut-eks-prereqs)
+ [1단계: 개발 머신 설정](#deploy-tut-eks-dev-env-create)
+ [2단계: Amazon EKS 클러스터 생성](#deploy-tut-eks-cluster)
+ [3단계: Amazon ECR 이미지 리포지토리 생성](#deploy-tut-eks-ecr)
+ [4단계: 소스 파일 추가](#deploy-tut-eks-source-files)
+ [5단계: AWS 역할 생성](#deploy-tut-eks-roles)
+ [6단계: CodeCatalyst에 AWS 역할 추가](#deploy-tut-eks-import-roles)
+ [7단계: ConfigMap 업데이트](#deploy-tut-eks-configmap)
+ [8단계: 워크플로 생성 및 실행](#deploy-tut-eks-workflow)
+ [9단계: 소스 파일 변경](#deploy-tut-eks-change)
+ [정리](#deploy-tut-eks-cleanup)

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

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

  ```
  codecatalyst-eks-project
  ```

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

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

  ```
  codecatalyst-eks-source-repository
  ```

  자세한 내용은 [CodeCatalyst의 소스 리포지토리로 코드 저장 및 협업소스 리포지토리를 사용하여 코드 저장 및 협업](source.md) 섹션을 참조하세요.
+ 프로젝트에는 다음과 같은 CodeCatalyst CI/CD **환경**(개발 환경 아님)이 필요합니다.

  ```
  codecatalyst-eks-environment
  ```

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

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

## 1단계: 개발 머신 설정
<a name="deploy-tut-eks-dev-env-create"></a>

이 자습서의 첫 번째 단계는 이 자습서 전체에서 사용할 몇 가지 도구를 사용하여 개발 머신을 구성하는 것입니다. 이러한 도구는 다음과 같습니다.
+ `eksctl` 유틸리티 - 클러스터 생성용
+ `kubectl` 유틸리티 - `eksctl`의 사전 조건 
+  AWS CLI -의 사전 조건이기도 합니다. `eksctl` 

이러한 도구가 있는 경우 기존 개발 시스템에 설치하거나 클라우드 기반 CodeCatalyst 개발 환경를 사용할 수 있습니다. CodeCatalyst 개발 환경의 이점은 스핀 업 및 테이크 다운이 쉽고 다른 CodeCatalyst 서비스와 통합되어 있어 이 자습서를 더 적은 단계로 진행할 수 있다는 것입니다.

이 자습서에서는 CodeCatalyst 개발 환경를 사용한다고 가정합니다.

다음 지침은 CodeCatalyst 개발 환경를 시작하고 필요한 도구로 구성하는 빠른 방법을 설명하지만 자세한 지침은 다음을 참조하세요.
+ [개발 환경 생성](devenvironment-create.md) 섹션을 참조하세요.
+ **Amazon EKS 사용 설명서**의 [kubectl 설치](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html).
+ **Amazon EKS 사용 설명서**의 [eksctl 설치 또는 업그레이드](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html).
+ *AWS Command Line Interface 사용자 안내서*의 [AWS CLI최신 버전 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html).

**새 개발 환경을 시작하려면**

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

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

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

1. 소스 리포지토리 `codecatalyst-eks-source-repository`의 이름을 선택합니다.

1. 상단 근처에서 **개발 환경 생성**을 선택한 다음 **AWS Cloud9 (브라우저에서)**를 선택합니다.

1. **기존 브랜치에서 작업** 및 **메인**이 선택되어 있는지 확인한 다음 **생성**을 선택합니다.

   개발 환경가 새 브라우저 탭에서 시작되고 리포지토리(`codecatalyst-eks-source-repository`)가 복제됩니다.

**kubectl을 설치 및 구성하려면**

1. 개발 환경 터미널에 다음을 입력합니다.

   ```
   curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl
   ```

1. 입력:

   ```
   chmod +x ./kubectl
   ```

1. 입력:

   ```
   mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
   ```

1. 입력:

   ```
   echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
   ```

1. 입력:

   ```
   kubectl version --short --client
   ```

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

   이제 `kubectl`이 설치됐습니다.

**eksctl을 설치 및 구성하려면**
**참고**  
대신 `kubectl`을 사용할 수 있으므로 `eksctl`이 반드시 필요한 것은 아닙니다. 그러나 `eksctl`은 클러스터 구성의 대부분을 자동화하는 이점을 제공하므로 이 자습서에 권장되는 도구입니다.

1. 개발 환경 터미널에 다음을 입력합니다.

   ```
   curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
   ```

1. 입력:

   ```
   sudo cp /tmp/eksctl /usr/bin
   ```

1. 입력:

   ```
   eksctl version
   ```

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

   이제 `eksctl`이 설치됐습니다.

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

1. 개발 환경 터미널에 다음을 입력합니다.

   ```
   aws --version
   ```

1. 버전이 표시되어 AWS CLI 가 설치되었는지 확인합니다.

   나머지 절차를 완료하여에 액세스하는 데 필요한 권한 AWS CLI 으로를 구성합니다 AWS.

**를 구성하려면 AWS CLI**

 AWS 서비스에 대한 액세스 권한을 부여하려면 AWS CLI 액세스 키와 세션 토큰으로를 구성해야 합니다. 다음 지침은 키와 토큰을 구성하는 빠른 방법을 제공하지만 자세한 지침은 *AWS Command Line Interface 사용자 설명서*의 [AWS CLI구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)을 참조하세요.

1. 다음과 같이 IAM Identity Center 사용자를 생성합니다.

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

      (IAM Identity Center에 로그인한 적이 없는 경우 **활성화**를 선택해야 할 수 있습니다.)
**참고**  
CodeCatalyst 스페이스에 AWS 계정 연결된를 사용하여 로그인해야 합니다. 스페이스로 이동하여 **AWS 계정** 탭을 선택하고 연결된 계정을 확인할 수 있습니다. 자세한 내용은 [스페이스 생성](spaces-create.md) 섹션을 참조하세요.

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

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

      ```
      codecatalyst-eks-user
      ```

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

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

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

      ```
      codecatalyst-eks-user
      ```

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

      ```
      codecatalyst-eks-user
      ```

   1. **표시 이름**에서 다음을 유지합니다.

      ```
      codecatalyst-eks-user codecatalyst-eks-user
      ```

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

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

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

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

   1. **복사**를 선택한 다음 로그인 정보를 텍스트 파일에 붙여넣습니다. 로그인 정보는 AWS 액세스 포털 URL, 사용자 이름 및 일회용 암호로 구성됩니다.

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

1. 다음과 같이 권한 세트를 생성합니다.

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

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

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

   1. **권한 세트 이름**에서 `AdministratorAccess`를 제거하고 다음을 입력합니다.

      ```
      codecatalyst-eks-permission-set
      ```

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

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

1. 다음과 같이 권한 세트를 `codecatalyst-eks-user`에 할당합니다.

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

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

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

   1. `codecatalyst-eks-user` 옆의 확인란을 선택합니다.

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

   1. `codecatalyst-eks-permission-set` 옆의 확인란을 선택합니다.

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

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

      이제 `codecatalyst-eks-user` 및를 `codecatalyst-eks-permission-set`에 할당하여 함께 AWS 계정바인딩했습니다.

1. 다음과 같이 `codecatalyst-eks-user`의 액세스 키 및 세션 토큰을 가져옵니다.

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

   1. 로그아웃합니다 AWS.

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

   1. 다음을 사용하여 로그인:
      + **사용자 이름**:

        ```
        codecatalyst-eks-user
        ```
      + **암호**:

        *일회용 암호*

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

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

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

   1. `codecatalyst-eks-permission-set` 옆의 **명령줄 또는 프로그래밍 액세스**를 선택합니다.

   1. 페이지 중간에 있는 명령을 복사합니다. 다음처럼 보일 것입니다.

      ```
      export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" 
      export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" 
      export AWS_SESSION_TOKEN="session-token"
      ```

      ...여기서 *세션 토큰*은 긴 무작위 문자열입니다.

1. 다음과 AWS CLI같이 액세스 키와 세션 토큰을에 추가합니다.

   1. CodeCatalyst 개발 환경으로 돌아갑니다.

   1. 터미널 프롬프트에서 복사한 명령을 붙여넣습니다. 입력을 누릅니다.

      이제 액세스 키와 세션 토큰 AWS CLI 으로를 구성했습니다. 이제 AWS CLI 를 사용하여이 자습서에 필요한 작업을 완료할 수 있습니다.
**중요**  
이 자습서 중에 언제든지 다음과 유사한 메시지가 표시되는 경우:  
`Unable to locate credentials. You can configure credentials by running "aws configure".`  
또는 다음과 같습니다.  
`ExpiredToken: The security token included in the request is expired`  
... AWS CLI 세션이 만료되었기 때문입니다. 이 경우 `aws configure` 명령을 실행하지 *않습니다*. 대신 `Obtain codecatalyst-eks-user's access key and session token`로 시작하는 이 절차의 4단계에 있는 지침을 사용하여 세션을 새로 고칩니다.

## 2단계: Amazon EKS 클러스터 생성
<a name="deploy-tut-eks-cluster"></a>

이 섹션에서는 Amazon EKS에서 클러스터를 생성합니다. 아래 지침은 `eksctl`를 사용하여 클러스터를 생성하는 빠른 방법을 설명하지만 자세한 지침은 다음을 참조하세요.
+ **Amazon EKS 사용 설명서**의 [eksctl 시작하기](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) 

  또는
+ **Amazon EKS 사용 설명서**의 [콘솔 및 AWS CLI시작하기](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html)(이 주제에서는 클러스터 생성 `kubectl` 지침을 제공합니다) 

**참고**  
[프라이빗 클러스터](https://docs.aws.amazon.com/eks/latest/userguide/private-clusters.html)는 Amazon EKS와의 CodeCatalyst 통합에서 지원되지 않습니다.

**시작하기 전에**

개발 시스템에서 다음 작업을 완료했는지 확인합니다.
+ `eksctl` 유틸리티를 설치했습니다.
+ `kubectl` 유틸리티를 설치했습니다.
+ 를 설치하고 액세스 키와 세션 토큰으로 AWS CLI 구성했습니다.

이러한 작업을 완료하는 방법에 대한 자세한 정보는 [1단계: 개발 머신 설정](#deploy-tut-eks-dev-env-create) 섹션을 참조하세요.

**클러스터 생성**
**중요**  
클러스터가 올바르게 구성되지 않으므로 Amazon EKS 서비스의 사용자 인터페이스를 사용하여 클러스터를 생성하지 마세요. 다음 단계에 설명된 대로 `eksctl` 유틸리티를 사용합니다.

1. 개발 환경으로 이동합니다.

1. 클러스터 및 노드를 생성합니다.

   ```
   eksctl create cluster --name codecatalyst-eks-cluster --region us-west-2
   ```

   위치:
   + *codecatalyst-eks-cluster*는 클러스터에 부여하려는 이름으로 대체됩니다.
   + *us-west-2*를 해당 리전으로 바꿉니다.

   10\$120분 후 다음과 비슷한 메시지가 나타납니다.

   `EKS cluster "codecatalyst-eks-cluster" in "us-west-2" region is ready`
**참고**  
 AWS 에서 클러스터를 생성하는 동안 여러 `waiting for CloudFormation stack` 메시지가 표시됩니다. 이는 예상된 동작입니다.

1. 클러스터가 성공적으로 생성되었는지 확인합니다.

   ```
   kubectl cluster-info
   ```

   성공적인 클러스터 생성을 나타내는 다음과 유사한 메시지가 표시됩니다.

   ```
   Kubernetes master is running at https://long-string.gr7.us-west-2.eks.amazonaws.com
   CoreDNS is running at https://long-string.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
   ```

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

이 섹션에서는 Amazon Elastic Container Registry(Amazon ECR)에서 프라이빗 이미지 리포지토리를 생성합니다. 이 리포지토리는 자습서의 Docker 이미지를 저장합니다.

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

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

1. 개발 환경으로 이동합니다.

1. Amazon ECR에 빈 리포지토리를 생성합니다.

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

   *codecatalyst-eks-image-repo*를 Amazon ECR 리포지토리에 부여하려는 이름으로 바꿉니다.

   이 자습서에서는 리포지토리 이름을 `codecatalyst-eks-image-repo`로 지정했다고 가정합니다.

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

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

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

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

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

이 섹션에서는 소스 리포지토리(`codecatalyst-eks-source-repository`)에 애플리케이션 소스 파일을 추가합니다. 다음과 같이 구성됩니다.
+ `index.html` 파일 - 'Hello, World\$1' 메시지를 브라우저에 표시합니다.
+ Dockerfile - Docker 이미지에 사용할 기본 이미지와 Docker 명령으로 적용할 기본 이미지를 설명합니다.
+ `deployment.yaml` 파일 - Kubernetes 서비스 및 배포를 정의하는 Kubernetes 매니페스트입니다.

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

```
|— codecatalyst-eks-source-repository
   |— Kubernetes
      |— deployment.yaml
   |— public-html
   |  |— index.html
   |— Dockerfile
```

**Topics**
+ [index.html](#deploy-tut-eks-source-files-index)
+ [Dockerfile](#deploy-tut-eks-source-files-dockerfile)
+ [deployment.yaml](#deploy-tut-eks-source-files-deployment-yml)

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

`index.html` 파일 - 'Hello, World\$1' 메시지를 브라우저에 표시합니다.

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

1. 개발 환경으로 이동합니다.

1. `codecatalyst-eks-source-repository`에서 이름이 `public-html`인 폴더를 생성합니다.

1. `/public-html`에서 다음 콘텐츠로 `index.html` 파일을 생성합니다.

   ```
   <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. 터미널 프롬프트에서 다음을 입력합니다.

   ```
   cd /projects/codecatalyst-eks-source-repository
   ```

1. 추가, 커밋 및 푸시:

   ```
   git add .
   git commit -m "add public-html/index.html"
   git push
   ```

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

### Dockerfile
<a name="deploy-tut-eks-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. `codecatalyst-eks-source-repository`에서 다음 콘텐츠로 `Dockerfile` 파일을 생성합니다.

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

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

1. 추가, 커밋 및 푸시:

   ```
   git add .
   git commit -m "add Dockerfile"
   git push
   ```

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

### deployment.yaml
<a name="deploy-tut-eks-source-files-deployment-yml"></a>

이 섹션에서는 리포지토리에 `deployment.yaml` 파일을 추가합니다. `deployment.yaml` 파일은 '서비스'와 '배포'라는 두 가지 Kubernetes 리소스 유형 또는 *실행 유형*을 정의하는 Kubernetes 매니페스트입니다.
+ '서비스'는 Amazon EC2에 로드 밸런서를 배포합니다. 로드 밸런서는 'Hello, World\$1'를 탐색하는 데 사용할 수 있는 인터넷 연결 퍼블릭 URL 및 표준 포트(포트 80)를 제공합니다. 애플리케이션을 배포합니다.
+ '배포'는 포드 3개를 배포하며 각 포드에는 'Hello, World\$1'가 포함된 Docker 컨테이너가 포함됩니다. 애플리케이션을 배포합니다. 세 포드는 클러스터를 생성할 때 생성된 노드에 배포됩니다.

이 자습서의 매니페스트는 짧지만 매니페스트에는 포드, 작업, 수신 및 네트워크 정책과 같은 다양한 Kubernetes 리소스 유형이 포함될 수 있습니다. 또한 배포가 복잡한 경우 여러 매니페스트 파일을 사용할 수 있습니다.

**deployment.yaml 파일을 추가하려면**

1. `codecatalyst-eks-source-repository`에서 이름이 `Kubernetes`인 폴더를 생성합니다.

1. `/Kubernetes`에서 다음 콘텐츠로 `deployment.yaml` 파일을 생성합니다.

   ```
   apiVersion: v1
   kind: Service
   metadata:
     name: my-service
     labels:
       app: my-app
   spec:
     type: LoadBalancer
     selector:
       app: my-app
     ports:
       - protocol: TCP
         port: 80
         targetPort: 80
   ---
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: my-deployment
     labels:
       app: my-app
   spec:
     replicas: 3
     selector:
       matchLabels:
         app: my-app
     template:
       metadata:
         labels:
           app: my-app
       spec:
         containers:
         - name: codecatalyst-eks-container
           # The $REPOSITORY_URI and $IMAGE_TAG placeholders will be replaced by actual values supplied by the build action in your workflow
           image: $REPOSITORY_URI:$IMAGE_TAG
           ports:
           - containerPort: 80
   ```

1. 추가, 커밋 및 푸시:

   ```
   git add .
   git commit -m "add Kubernetes/deployment.yaml"
   git push
   ```

   `deployment.yaml`은 `Kubernetes` 폴더의 리포지토리에 추가됩니다.

이제 모든 소스 파일을 추가했습니다.

잠시 시간을 내어 작업을 다시 확인하고 모든 파일을 올바른 폴더에 넣었는지 확인하세요. 폴더의 구조는 다음과 같습니다.

```
|— codecatalyst-eks-source-repository
   |— Kubernetes
      |— deployment.yaml
   |— public-html
   |  |— index.html
   |— Dockerfile
```

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

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

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` 역할에는 보안 위험을 초래할 수 있는 매우 광범위한 권한이 있음을 이해합니다. 보안에 대한 우려가 적은 자습서 및 시나리오에서만 이 역할을 사용하는 것이 좋습니다. 이 자습서에서는 이전에 나열된 두 역할을 생성하고 있다고 가정합니다.

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

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

1. 개발 환경으로 이동합니다.

1. `Cloud9-long-string` 디렉터리에 다음 콘텐츠로 `codecatalyst-eks-trust-policy.json` 파일을 생성합니다.

**2. 빌드 역할에 대한 빌드 정책을 생성하려면**
+ `Cloud9-long-string` 디렉터리에 다음 콘텐츠로 `codecatalyst-eks-build-policy.json` 파일을 생성합니다.

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

****  

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

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

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

**3. 배포 정책을 생성하고 역할을 배포하려면**
+ `Cloud9-long-string` 디렉터리에 다음 콘텐츠로 `codecatalyst-eks-deploy-policy.json` 파일을 생성합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "eks:DescribeCluster",
                  "eks:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

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

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

이제 개발 환경에 세 개의 정책 문서를 추가했습니다. 디렉터리 구조는 다음과 같습니다.

```
|— Cloud9-long-string
   |— .c9
   |— codecatalyst-eks-source-repository
      |— Kubernetes
      |— public-html
      |— Dockerfile
   codecatalyst-eks-build-policy.json
   codecatalyst-eks-deploy-policy.json
   codecatalyst-eks-trust-policy.json
```

**4. 에 빌드 정책을 추가하려면 AWS**

1. 개발 환경 터미널에 다음을 입력합니다.

   ```
   cd /projects
   ```

1. 입력:

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

1. **Enter**를 누릅니다.

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

**5. 에 배포 정책을 추가하려면 AWS**

1. 입력:

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

1. **Enter**를 누릅니다.

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

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

1. 입력: 

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

1. **Enter**를 누릅니다.

1. 입력:

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

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

1. **Enter**를 누릅니다.

1. 터미널 프롬프트에서 다음을 입력합니다.

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

1. **Enter**를 누릅니다.

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

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

1. 입력:

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

1. **Enter**를 누릅니다.

1. 입력:

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

   *arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy*가 앞서 언급한 배포 정책의 ARN으로 대체되는 경우.

1. **Enter**를 누릅니다.

1. 입력:

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

1. **Enter**를 누릅니다.

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

이제 빌드 및 배포 역할을 생성하고 해당 ARN을 기록했습니다.

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

이 단계에서는 스페이스에 AWS 계정 연결된에 빌드 역할(`codecatalyst-eks-build-role`) 및 배포 역할(`codecatalyst-eks-deploy-role`)을 추가합니다. 이렇게 하면 워크플로에서 역할을 사용할 수 있습니다.

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

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

1. 상단에서 **설정**을 선택합니다.

1. 탐색 창에서 **AWS 계정**을 선택합니다. 계정 목록이 나타납니다.

1. **Amazon CodeCatalyst 표시 이름** 열에서 빌드 및 배포 역할을 생성한 AWS 계정 의 표시 이름을 복사합니다. (숫자일 수 있습니다.) 워크플로를 생성할 때 나중에 이 값이 필요합니다.

1. 표시 이름을 선택합니다.

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

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

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

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

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

1. CodeCatalyst 콘솔로 돌아가 페이지를 새로 고칩니다.

   이제 빌드 및 배포 역할이 **IAM 역할** 아래에 표시됩니다.

   이제 CodeCatalyst 워크플로에서 이러한 역할을 사용할 수 있습니다.

## 7단계: ConfigMap 업데이트
<a name="deploy-tut-eks-configmap"></a>

[5단계: AWS 역할 생성](#deploy-tut-eks-roles)에서 생성한 배포 역할을 Kubernetes `ConfigMap` 파일에 추가하여 (워크플로의) **Kubernetes 클러스터에 배포** 작업에 클러스터에 액세스하고 상호 작용할 수 있는 기능을 부여해야 합니다. `eksctl` 또는 `kubectl`를 사용하여 이러한 작업을 수행할 수 있습니다.

**eksctl을 사용하여 Kubernetes ConfigMap 파일을 구성하려면**
+ 개발 환경 터미널에 다음을 입력합니다.

  ```
  eksctl create iamidentitymapping --cluster codecatalyst-eks-cluster --arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role --group system:masters --username codecatalyst-eks-deploy-role --region us-west-2
  ```

  위치:
  + *codecatalyst-eks-cluster*는 Amazon EKS 클러스터의 클러스터 이름으로 대체됩니다.
  +  *arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role*은 [5단계: AWS 역할 생성](#deploy-tut-eks-roles)에서 생성한 배포 역할의 ARN으로 대체됩니다.
  +  *codecatalyst-eks-deploy-role*(`--username` 옆)은 [5단계: AWS 역할 생성](#deploy-tut-eks-roles)에서 생성한 배포 역할의 이름으로 대체됩니다.
**참고**  
배포 역할을 생성하지 않기로 결정한 경우 *codecatalyst-eks-deploy-role*을 `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할 이름으로 바꿉니다. 이에 대한 자세한 내용은 [5단계: AWS 역할 생성](#deploy-tut-eks-roles) 섹션을 참조하세요.
  +  *us-west-2*를 해당 리전으로 바꿉니다.

  이 명령에 대한 자세한 내용은 [IAM 사용자 및 역할 관리](https://eksctl.io/usage/iam-identity-mappings/)를 참조하세요.

  다음과 비슷한 메시지가 나타납니다.

  ```
  2023-06-09 00:58:29 [ℹ]  checking arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role against entries in the auth ConfigMap
  2023-06-09 00:58:29 [ℹ]  adding identity "arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role" to auth ConfigMap
  ```

**kubectl을 사용하여 Kubernetes ConfigMap 파일을 구성하려면**

1. 개발 환경 터미널에 다음을 입력합니다.

   ```
   kubectl edit configmap -n kube-system aws-auth
   ```

   ConfigMap 파일이 화면에 나타납니다.

1. 빨간색 기울임꼴로 텍스트를 추가합니다.

   ```
   # Please edit the object below. Lines beginning with a '#' will be ignored,
   # and an empty file will abort the edit. If an error occurs while saving this file will be
   # reopened with the relevant failures.
   #
   apiVersion: v1
   data:
     mapRoles: |
       - groups:
         - system:bootstrappers
         - system:nodes
         rolearn: arn:aws:iam::111122223333:role/eksctl-codecatalyst-eks-cluster-n-NodeInstanceRole-16BC456ME6YR5
         username: system:node:{{EC2PrivateDNSName}}
       - groups:
         - system:masters
         rolearn: arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role
         username: codecatalyst-eks-deploy-role
     mapUsers: |
       []
   kind: ConfigMap
   metadata:
     creationTimestamp: "2023-06-08T19:04:39Z"
     managedFields:
     ...
   ```

   위치:
   +  *arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role*은 [5단계: AWS 역할 생성](#deploy-tut-eks-roles)에서 생성한 배포 역할의 ARN으로 대체됩니다.
   +  *codecatalyst-eks-deploy-role*(`username:` 옆)은 [5단계: AWS 역할 생성](#deploy-tut-eks-roles)에서 생성한 배포 역할의 이름으로 대체됩니다.
**참고**  
배포 역할을 생성하지 않기로 결정한 경우 *codecatalyst-eks-deploy-role*을 `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할 이름으로 바꿉니다. 이에 대한 자세한 내용은 [5단계: AWS 역할 생성](#deploy-tut-eks-roles) 섹션을 참조하세요.

   자세한 내용은 **Amazon EKS 사용 설명서**의 [클러스터에 대한 IAM 위탁자 액세스 활성화](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)를 참조하세요.

이제 배포 역할을 부여하고 **Amazon EKS에 배포** 작업을 확장하여 Kubernetes 클러스터에 대한 `system:masters` 권한을 부여했습니다.

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

이 단계에서는 소스 파일을 가져와 Docker 이미지로 빌드한 다음 Amazon EKS 클러스터의 트리 포드에 이미지를 배포하는 워크플로를 생성합니다.

워크플로는 순차적으로 실행되는 다음 구성 요소로 구성됩니다.
+ 트리거 - 이 트리거는 소스 리포지토리에 변경 사항을 푸시할 때 워크플로 실행을 자동으로 시작합니다. 트리거에 대한 자세한 내용은 [트리거를 사용하여 워크플로 실행 자동 시작](workflows-add-trigger.md) 주제를 참조하세요.
+ 빌드 작업(`BuildBackend`) - 트리거 시 작업은 Dockerfile을 사용하여 Docker 이미지를 빌드하고 Amazon ECR에 이미지를 푸시합니다. 빌드 작업은 `deployment.yaml` 파일의 `$REPOSITORY_URI` 및 `$IMAGE_TAG` 변수를 올바른 값으로 업데이트한 다음 이 파일과 `Kubernetes` 폴더의 다른 모든 출력 아티팩트를 생성합니다. 이 자습서에서 `Kubernetes` 폴더의 유일한 파일은 `deployment.yaml`이지만 더 많은 파일을 포함할 수 있습니다. 아티팩트는 배포 작업의 입력으로 사용되며, 그 다음입니다.

  빌드 작업에 대한 자세한 내용은 [워크플로로 빌드하기](build-workflow-actions.md) 섹션을 참조하세요.
+ 배포 작업(`DeployToEKS`) - 빌드 작업이 완료되면 배포 작업은 빌드 작업(`Manifests`)에서 생성된 출력 아티팩트를 찾아 그 안의 `deployment.yaml` 파일을 찾습니다. 그런 다음 이 작업은 `deployment.yaml` 파일의 지침에 따라 각각 단일 'Hello, World\$1'가 포함된 세 개의 포드를 실행합니다. Docker 컨테이너 - Amazon EKS 클러스터 내부.

**워크플로 생성**

1. CodeCatalyst 콘솔로 이동합니다.

1. 프로젝트(`codecatalyst-eks-project`)로 이동합니다.

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

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

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

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

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

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

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

   ```
   Name: codecatalyst-eks-workflow
   SchemaVersion: 1.0
   
   Triggers:
     - Type: PUSH
       Branches:
         - main
   Actions:
     BuildBackend:
       Identifier: aws/build@v1
       Environment:
         Name: codecatalyst-eks-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-eks-build-role
       Inputs:
         Sources:
           - WorkflowSource
         Variables:
           - Name: REPOSITORY_URI
             Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-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 deployment.yaml
           - Run: find Kubernetes/ -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g"
           - Run: find Kubernetes/ -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g"
           - Run: cat Kubernetes/*
           # The output artifact will be a zip file that contains Kubernetes manifest files.
       Outputs:
         Artifacts:
           - Name: Manifests
             Files: 
               - "Kubernetes/*"
     DeployToEKS:
       DependsOn: 
         - BuildBackend
       Identifier: aws/kubernetes-deploy@v1
       Environment:
         Name: codecatalyst-eks-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-eks-deploy-role
       Inputs:
         Artifacts:
           - Manifests
       Configuration:
         Namespace: default
         Region: us-west-2
         Cluster: codecatalyst-eks-cluster
         Manifests: Kubernetes/
   ```

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

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

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

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

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

      ```
      Add first workflow
      ```

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

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

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

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

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

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

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

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

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

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

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

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

1. 왼쪽 하단에서 **로드 밸런서**를 선택합니다.

1. Kubernetes 배포의 일부로 생성된 로드 밸런서를 선택합니다. 선택할 로드 밸런서가 확실하지 않은 경우 태그 탭에서 다음 **태그**를 찾습니다.
   + `kubernetes.io/service-name`
   + `kubernetes.io/cluster/ekstutorialcluster`

1. 올바른 로드 밸런서를 선택한 상태에서 **설명** 탭을 선택합니다.

1. **DNS 이름** 값을 복사하여 브라우저의 주소 표시줄에 붙여 넣습니다.

   “Hello World\$1” 웹페이지가 브라우저에 표시되며 애플리케이션을 성공적으로 배포했음을 나타냅니다.

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

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

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

1. 개발 환경으로 이동합니다.

1. 터미널 프롬프트에서 소스 리포지토리로 변경합니다.

   ```
   cd /projects/codecatalyst-eks-source-repository
   ```

1.  최신 워크플로 변경 사항 가져오기:

   ```
   git pull
   ```

1. `codecatalyst-eks-source-repository/public-html/index.html`를 엽니다.

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

1. 추가, 커밋 및 푸시:

   ```
   git add .
   git commit -m "update index.html title"
   git push
   ```

   워크플로 실행이 자동으로 시작됩니다.

1. (선택 사항) 다음을 입력합니다.

   ```
   git show HEAD
   ```

   `index.html` 변경 사항에 대한 커밋 ID를 기록해 둡니다. 이 커밋 ID는 방금 시작한 워크플로 실행에 의해 배포될 Docker 이미지에 태그가 지정됩니다.

1. 배포 진행 상황 보기:

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

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

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

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

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

   1. 왼쪽 하단에서 **로드 밸런서**를 선택합니다.

   1. Kubernetes 배포의 일부로 생성된 로드 밸런서를 선택합니다.

   1. **DNS 이름** 값을 복사하여 브라우저의 주소 표시줄에 붙여 넣습니다.

      ‘자습서가 완료되었습니다\$1’ 웹 페이지가 브라우저에 나타나 애플리케이션의 새 버전을 성공적으로 배포했음을 나타냅니다.

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

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

이 자습서에서 사용하는 스토리지 및 컴퓨팅 리소스에 대해 불필요한 요금이 부과되지 않도록 환경을 정리해야 합니다.

**정리하려면**

1. 클러스터 삭제:

   1. 개발 환경 터미널에 다음을 입력합니다.

     ```
     eksctl delete cluster --region=us-west-2 --name=codecatalyst-eks-cluster
     ```

     위치:
     + *us-west-2*를 해당 리전으로 바꿉니다.
     + *codecatalyst-eks-cluster*는 생성한 클러스터의 이름으로 대체됩니다.

     5\$110분이 지나면 CloudFormation 스택, 노드 그룹(Amazon EC2) 및 로드 밸런서를 포함하되 이에 국한되지 않는 클러스터 및 관련 리소스가 삭제됩니다.
**중요**  
`eksctl delete cluster` 명령이 작동하지 않으면 자격 AWS 증명 또는 자격 `kubectl` 증명을 새로 고쳐야 할 수 있습니다. 어떤 자격 증명을 새로 고칠지 확실하지 않은 경우 먼저 AWS 자격 증명을 새로 고칩니다. AWS 자격 증명을 새로 고치려면 ['Unable to locate credentials' 및 'ExpiredToken' 오류를 해결하려면 어떻게 해야 하나요?](troubleshooting-workflows.md#troubleshooting-workflows-auth-errors-eks) 섹션을 참조하세요. `kubectl` 자격 증명을 새로 고치려면 ['Unable to connect to the server' 오류를 해결하려면 어떻게 해야 하나요?](troubleshooting-workflows.md#troubleshooting-workflows-unable-connect-eks) 섹션을 참조하세요.

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

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

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

      1. `codecatalyst-eks-user`

      1. `codecatalyst-eks-permission-set`

   1. IAM에서 다음을 삭제합니다.
      + `codecatalyst-eks-build-role`
      + `codecatalyst-eks-deploy-role`
      + `codecatalyst-eks-build-policy`
      + `codecatalyst-eks-deploy-policy`

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

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

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

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

   1. 개발 환경을 삭제합니다.

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

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

# 'Kubernetes 클러스터에 배포' 작업 추가
<a name="deploy-action-eks-adding"></a>

다음 지침을 사용하여 워크플로에 **Kubernetes 클러스터에 배포** 작업을 추가합니다.

**시작하기 전에**

워크플로에 **Kubernetes 클러스터에 배포** 작업을 추가하기 전에 다음을 준비해야 합니다.

**작은 정보**  
이러한 사전 조건을 빠르게 설정하려면 [자습서: Amazon EKS에 애플리케이션 배포](deploy-tut-eks.md)의 지침을 따르세요.
+ Amazon EKS의 Kubernetes 클러스터. 클러스터에 대한 자세한 내용은 **Amazon EKS 사용 설명서**의 [Amazon EKS 클러스터](https://docs.aws.amazon.com/eks/latest/userguide/clusters.html)을 참조하세요.
+ 애플리케이션을 Docker 이미지로 조립하는 방법을 설명하는 Dockerfile이 하나 이상 있습니다. Dockerfile에 대한 자세한 내용은 [Dockerfile 참조](https://docs.docker.com/engine/reference/builder/)를 참조하세요.
+ Kubernetes 설명서에서 *구성 파일* 또는 *구성*이라는 하나 이상의 Kubernetes 매니페스트 파일. 자세한 내용은 Kubernetes 문서의 [리소스 관리](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/)를 참조하세요.
+ **Kubernetes 클러스터에 배포** 작업에 Amazon EKS 클러스터에 액세스하고 상호 작용할 수 있는 기능을 제공하는 IAM 역할입니다. 자세한 내용은 ['Kubernetes 클러스터에 배포' 작업 YAML](deploy-action-ref-eks.md)에서 [Role](deploy-action-ref-eks.md#deploy.action.eks.environment.connections.role) 주제를 참조하세요.

  이 역할을 생성한 후 다음 위치에 추가해야 합니다.
  + Kubernetes ConfigMap 파일. ConfigMap 파일에 역할을 추가하는 방법을 알아보려면 **Amazon EKS 사용 설명서**의 [클러스터에 대한 IAM 위탁자 액세스 활성화](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)를 참조하세요.
  + CodeCatalyst CodeCatalyst에 IAM 역할을 추가하는 방법은 [계정 연결에 IAM 역할 추가](ipa-connect-account-addroles.md) 섹션을 참조하세요.
+ CodeCatalyst 스페이스, 프로젝트 및 환경. 스페이스와 환경은 모두 애플리케이션을 배포할 AWS 계정에 연결되어야 합니다. 자세한 내용은 [스페이스 생성](spaces-create.md), [Amazon CodeCatalyst에서 빈 프로젝트 생성](projects-create.md#projects-create-empty), [AWS 계정 및 VPCs에 배포](deploy-environments.md) 섹션을 참조하세요.
+ CodeCatalyst에서 지원하는 소스 리포지토리입니다. 리포지토리는 애플리케이션 소스 파일, Dockerfiles 및 Kubernetes 매니페스트를 저장합니다. 자세한 내용은 [CodeCatalyst의 소스 리포지토리로 코드 저장 및 협업소스 리포지토리를 사용하여 코드 저장 및 협업](source.md) 섹션을 참조하세요.

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

**시각적 편집기를 사용하여 'Kubernetes 클러스터에 배포' 작업을 추가하려면**

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**YAML 편집기를 사용하여 'Kubernetes 클러스터에 배포' 작업을 추가하려면**

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

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

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

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

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

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

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

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

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

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

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

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

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

------

# 'Kubernetes 클러스터에 배포' 변수
<a name="deploy-action-eks-variables"></a>

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

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


| Key(키) | 값 | 
| --- | --- | 
|  클러스터  |  워크플로 실행 중에 에 배포된 Amazon EKS 클러스터의 Amazon.com 리소스 이름(ARN)입니다. 예시: `arn:aws:eks:us-west-2:111122223333:cluster/codecatalyst-eks-cluster`  | 
|  deployment-platform  |  배포 플랫폼의 이름입니다. `AWS:EKS`로 하드코딩되었습니다.  | 
|  metadata  |  예약. 워크플로 실행 중에 배포된 클러스터와 관련된 JSON 형식 메타데이터입니다.  | 
|  네임스페이스  |  클러스터가 배포된 Kubernetes 네임스페이스입니다. 예시: `default`  | 
|  리소스  |  예약. 워크플로 실행 중에 배포된 리소스와 관련된 JSON 형식 메타데이터입니다.  | 
|  서버  |  `kubectl` 같은 관리 도구를 사용하여 클러스터와 통신하는 데 사용할 수 있는 API 서버 엔드포인트의 이름입니다. 자세한 내용은 **Amazon EKS 사용 설명서**의 [Amazon EKS 클러스터 엔드포인트 액세스 제어](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)를 참조하세요. 예시: `https://random-string.gr7.us-west-2.eks.amazonaws.com`  | 

# 'Kubernetes 클러스터에 배포' 작업 YAML
<a name="deploy-action-ref-eks"></a>

다음은 **Kubernetes에 배포 클러스터** 작업의 YAML 정의입니다. 이러한 작업 사용 방법을 배우려면 [워크플로를 사용하여 Amazon EKS에 배포](deploy-action-eks.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.   
  DeployToKubernetesCluster\$1nn: 
    Identifier: aws/kubernetes-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: DeployToEKS
    Inputs:
      # Specify a source or an artifact, but not both.
      Sources:
        - source-name-1
      Artifacts:
        - manifest-artifact
    Configuration:
      Namespace: namespace
      Region: us-east-1 
      Cluster: eks-cluster
      Manifests: manifest-path
```

## DeployToKubernetesCluster
<a name="deploy.action.eks.name"></a>

(필수)

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

기본값: `DeployToKubernetesCluster_nn`.

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

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

(*DeployToKubernetesCluster*/**Identifier**)

(필수)

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

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

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

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

(*DeployToKubernetesCluster*/**DependsOn**)

(선택 사항)

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

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

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

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

(*DeployToKubernetesCluster*/**Compute**)

(선택 사항)

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

해당 UI: *없음*

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

(*DeployToKubernetesCluster*/Compute/**Type**)

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

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

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

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

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

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

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

(*DeployToKubernetesCluster*/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.eks.timeout"></a>

(*DeployToKubernetesCluster*/**Timeout**)

(선택 사항)

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

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

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

(*DeployToKubernetesCluster*/**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.eks.environment.name"></a>

(*DeployToKubernetesCluster*/Environment/**Name**)

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

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

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

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

(*DeployToKubernetesCluster*/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.eks.environment.connections.name"></a>

(*DeployToKubernetesCluster*/Environment/Connections/**Name**)

(선택 사항)

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

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

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

(*DeployToKubernetesCluster*/Environment/Connections/**Role**)

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

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

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

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "eks:DescribeCluster",
                  "eks:ListClusters"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

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

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

이 역할이 다음에 추가되었는지 확인합니다.
+ 계정 연결. IAM 역할을 계정 연결에 추가하는 방법에 대한 자세한 내용은 [계정 연결에 IAM 역할 추가](ipa-connect-account-addroles.md) 섹션을 참조하세요.
+ Kubernetes ConfigMap. ConfigMap에 IAM 역할을 추가하는 방법에 대한 자세한 내용은 `eksctl` 설명서의 [IAM 사용자 및 역할 관리를](https://eksctl.io/usage/iam-identity-mappings/) 참조하세요.

**작은 정보**  
계정 연결 및 ConfigMap에 am IAM 역할을 추가하는 방법에 대한 지침은 [자습서: Amazon EKS에 애플리케이션 배포](deploy-tut-eks.md) 섹션을 참조하세요.

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

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

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

(*DeployToKubernetesCluster*/**Inputs**)

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

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

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

해당 UI: **입력** 탭

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

(*DeployToKubernetesCluster*/Inputs/**Sources**)

(매니페스트 파일이 소스 리포지토리에 저장된 경우 필수)

Kubernetes 매니페스트 파일 또는 파일이 소스 리포지토리에 저장되는 경우 해당 소스 리포지토리의 레이블을 지정합니다. 현재, `WorkflowSource` 레이블만 지원됩니다.

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

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

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

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

(*DeployToKubernetesCluster*/Inputs/**Artifacts**)

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

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

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

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

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

(*DeployToKubernetesCluster*/**Configuration**)

(필수)

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

해당 UI: **구성** 탭

## Namespace
<a name="deploy.action.eks.namespace"></a>

(*DeployToKubernetesCluster*/Configuration/**Namespace**)

(선택 사항)

Kubernetes 애플리케이션을 배포할 Kubernetes 네임스페이스를 지정합니다. 클러스터에서 네임스페이스를 사용하지 않는 경우 `default`를 사용합니다. 네임스페이스에 대한 자세한 내용은 Kubernetes 설명서의 [Kubernetes 네임스페이스를 사용하여 클러스터 세분화](https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#subdividing-your-cluster-using-kubernetes-namespaces)를 참조하세요.

네임스페이스를 생략하면 `default` 값이 사용됩니다.

해당 UI: 구성 탭/**네임스페이스**

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

(*DeployToKubernetesCluster*/Configuration/**Region**)

(필수)

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

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

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

(*DeployToKubernetesCluster*/Configuration/**Cluster**)

(필수)

기존 Amazon EKS 클러스터의 이름을 지정합니다. **Kubernetes 클러스터에 배포** 작업을 수행하면 컨테이너화된 애플리케이션이 이 클러스터에 배포됩니다. Amazon EKS 클러스터에 대한 자세한 내용은 **Amazon EKS 사용 설명서**의 [Amazon EKS 클러스터](https://docs.aws.amazon.com/eks/latest/userguide/clusters.html)을 참조하세요.

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

## Manifests
<a name="deploy.action.eks.manifest"></a>

(*DeployToKubernetesCluster*/Configuration/**Manifests**)

(필수)

Kubernetes 설명서에서 구성 파일, *구성 파일*, *config 파일* 또는 단순히 *구성*이라고 하는 YAML 형식의 Kubernetes 매니페스트 파일(들)의 경로를 지정합니다.

여러 매니페스트 파일을 사용하는 경우 단일 폴더에 배치하고 해당 폴더를 참조합니다. 매니페스트 파일은 Kubernetes에서 영숫자로 처리되므로 파일 이름 앞에 숫자 또는 문자가 늘어나도록 하여 처리 순서를 제어해야 합니다. 예제:

`00-namespace.yaml`

`01-deployment.yaml`

매니페스트 파일이 소스 리포지토리에 있는 경우 경로는 소스 리포지토리 루트 폴더를 기준으로 합니다. 파일이 이전 워크플로 작업의 아티팩트에 있는 경우 경로는 아티팩트 루트 폴더를 기준으로 합니다.

예시:

`Manifests/`

`deployment.yaml`

`my-deployment.yml`

와일드카드(`*`)를 사용하지 않습니다.

**참고**  
[헬름 차트](https://helm.sh/docs/topics/charts/) 및 [kustomization 파일](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/)은 지원되지 않습니다.

매니페스트 파일에 대한 자세한 내용은 Kubernetes 설명서의 [리소스 구성 조직하기](https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#organizing-resource-configurations) 섹션을 참조하세요.

해당 UI: 구성 탭/**매니페스트**