

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

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

# CloudFormation 스택 배포
<a name="deploy-action-cfn"></a>

이 섹션에서는 CodeCatalyst 워크플로를 사용하여 AWS CloudFormation 스택을 배포하는 방법을 설명합니다. 이렇게 하려면 ** CloudFormation 스택 배포** 작업을 워크플로에 추가해야 합니다. 작업은 사용자가 제공한 템플릿을 AWS 기반으로 리소스의 CloudFormation 스택을에 배포합니다. 템플릿은 다음과 같을 수 있습니다.
+ CloudFormation 템플릿 - 자세한 내용은 [템플릿 작업을 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)참조하세요.
+ AWS SAM 템플릿 - 자세한 내용은 [AWS Serverless Application Model (AWS SAM) 사양을](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html) 참조하세요.
**참고**  
 AWS SAM 템플릿을 사용하려면 먼저 `[sam package](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-package.html)` 작업을 사용하여 AWS SAM 애플리케이션을 패키징해야 합니다. Amazon CodeCatalyst 워크플로의 일부로 이 패키징을 자동으로 수행하는 방법을 보여주는 자습서는 [자습서: 서버리스 애플리케이션 배포](deploy-tut-lambda.md) 섹션을 참조하세요.

스택이 이미 있는 경우 작업은 CloudFormation `[CreateChangeSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateChangeSet.html)` 작업을 실행한 다음 `[ExecuteChangeSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ExecuteChangeSet.html)` 작업을 실행합니다. 그러면 작업이 변경 사항이 배포될 때까지 대기한 뒤 결과에 따라 성공 또는 실패로 표시됩니다.

배포하려는 리소스가 포함된 CloudFormation 또는 AWS SAM 템플릿이 이미 있거나 AWS SAM 및와 같은 도구를 사용하여 워크플로 빌드 작업의 일부로 스택을 자동으로 생성할 계획인 경우 ** CloudFormation 스택** 배포 작업을 사용합니다[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html). [빌드 작업 추가](build-add-action.md) 

CloudFormation에서 작성하거나 ** CloudFormation 스택 배포** 작업과 함께 AWS SAM 사용할 수 있는 템플릿에는 제한이 없습니다.

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

**Topics**
+ ['스 CloudFormation 택 배포' 작업에서 사용하는 런타임 이미지](#deploy-action-cfn-runtime)
+ [자습서: 서버리스 애플리케이션 배포](deploy-tut-lambda.md)
+ ['스 CloudFormation 택 배포' 작업 추가](deploy-action-cfn-adding.md)
+ [롤백 구성](deploy-consumption-enable-alarms.md)
+ ['스 CloudFormation 택 배포' 변수](deploy-action-cfn-variables.md)
+ ['스 CloudFormation 택 배포' 작업 YAML](deploy-action-ref-cfn.md)

## '스 CloudFormation 택 배포' 작업에서 사용하는 런타임 이미지
<a name="deploy-action-cfn-runtime"></a>

** CloudFormation 스택 배포** 작업은 [2022년 11월 이미지](build-images.md#build.previous-image)에서 실행됩니다. 자세한 내용은 [활성 이미지](build-images.md#build-curated-images) 단원을 참조하십시오.

# 자습서: 서버리스 애플리케이션 배포
<a name="deploy-tut-lambda"></a>

이 자습서에서는 워크플로를 사용하여 CloudFormation 스택으로 서버리스 애플리케이션을 빌드, 테스트 및 배포하는 방법을 알아봅니다.

이 자습서의 애플리케이션은 'Hello World' 메시지를 출력하는 간단한 웹 애플리케이션입니다. AWS Lambda 함수와 Amazon API Gateway로 구성되며의 확장인 [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)를 사용하여 빌드합니다[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

**Topics**
+ [사전 조건](#deploy-tut-lambda-cfn-prereqs)
+ [1단계: 소스 리포지토리 생성](#deploy-tut-lambda-cfn-source)
+ [2단계: AWS 역할 생성](#deploy-tut-lambda-cfn-roles)
+ [3단계: CodeCatalyst에 AWS 역할 추가](#deploy-tut-lambda-cfn-roles-add)
+ [4단계: Amazon S3 버킷 생성](#deploy-tut-lambda-cfn-s3)
+ [5단계: 소스 파일 추가](#deploy-tut-lambda-cfn-files)
+ [6단계: 워크플로 생성 및 실행](#deploy-tut-lambda-cfn-workflow)
+ [7단계: 변경](#deploy-tut-lambda-cfn-change)
+ [정리](#deploy-tut-lambda-cfn-clean-up)

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

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

  ```
  codecatalyst-cfn-project
  ```

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

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

  ```
  codecatalyst-cfn-environment
  ```

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

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

## 1단계: 소스 리포지토리 생성
<a name="deploy-tut-lambda-cfn-source"></a>

이 단계에서는 CodeCatalyst에 소스 리포지토리를 생성합니다. 이 리포지토리는 Lambda 함수 파일과 같은 자습서의 소스 파일을 저장하는 데 사용됩니다.

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

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

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

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

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

   ```
   codecatalyst-cfn-source-repository
   ```

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

이제 `codecatalyst-cfn-source-repository` 리포지토리를 생성했습니다.

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

이 단계에서는 다음 AWS IAM 역할을 생성합니다.
+ **역할 배포** - CodeCatalyst ** CloudFormation 스택 배포** 작업에 서버리스 애플리케이션을 배포할 AWS 계정 및 CloudFormation 서비스에 액세스할 수 있는 권한을 부여합니다. ** CloudFormation 스택 배포** 작업은 워크플로의 일부입니다.
+ **빌드 역할** - CodeCatalyst 빌드 작업에 AWS 계정에 액세스하고 서버리스 애플리케이션 패키지가 저장될 Amazon S3에 쓸 수 있는 권한을 부여합니다. 빌드 작업은 워크플로의 일부입니다.
+ **스택 역할** - 나중에 제공할 AWS SAM 템플릿에 지정된 리소스를 읽고 수정할 수 있는 CloudFormation 권한을 부여합니다. 또한 CloudWatch에 권한을 부여합니다.

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

**참고**  
[Lambda 실행 역할](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)도 필요하지만 5단계에서 워크플로를 실행할 때 `sam-template.yml` 파일이 생성하므로 지금 생성할 필요가 없습니다.



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

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

   1. 에 로그인합니다 AWS.

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

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

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

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

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

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

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

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

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

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

      ```
      codecatalyst-deploy-policy
      ```

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

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

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

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

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

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

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

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

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

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

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

      ```
      codecatalyst-deploy-role
      ```

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

      ```
      CodeCatalyst deploy role
      ```

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

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

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

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

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

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

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

   1. 상단에서 **ARN** 값을 복사합니다.

   이제 적절한 권한으로 배포 역할을 생성하고 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. 다음 코드를 붙여넣습니다.
**참고**  
역할을 처음 사용하여 워크플로 작업을 실행할 때 리소스 정책 문에서 와일드카드를 사용한 다음, 사용 가능한 리소스 이름으로 정책 범위를 좁힙니다.  

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

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

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

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

      ```
      codecatalyst-build-policy
      ```

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

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

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

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

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

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

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

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

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

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

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

      ```
      codecatalyst-build-role
      ```

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

      ```
      CodeCatalyst build role
      ```

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

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

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

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

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

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

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

   1. 상단에서 **ARN** 값을 복사합니다.

   이제 적절한 권한으로 빌드 역할을 생성하고 ARN을 획득했습니다.<a name="deploy-tut-lambda-cfn-roles-stack"></a>

**스택 역할을 생성하려면**

1. 스택을 배포하려는 계정을 AWS 사용하여에 로그인합니다.

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

1. 다음과 같이 스택 역할을 생성합니다.

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

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

   1. **AWS 서비스**를 선택합니다.

   1. **사용 사례** 섹션의 드롭다운 목록에서 **CloudFormation**을 선택합니다.

   1. **CloudFormation** 라디오 버튼을 선택합니다.

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

   1. 검색 상자를 사용하여 다음 권한 정책을 찾은 다음 해당 확인란을 선택합니다.
**참고**  
정책을 검색했지만 표시되지 않는 경우 **필터 지우기**를 선택하고 다시 시도해야 합니다.
      + **CloudWatchFullAccess**
      + **AWS CloudFormationFullAccess**
      + **IAMFullAccess**
      + **AWS Lambda\$1FullAccess**
      + **AmazonAPIGatewayAdministrator**
      + **AmazonS3FullAccess**
      + **AmazonEC2ContainerRegistryFullAccess**

      첫 번째 정책은 경보가 발생할 때 스택 롤백을 활성화하기 위해 CloudWatch에 대한 액세스를 허용합니다.

      나머지 정책은가이 자습서에서 배포할 스택의 서비스 및 리소스에 AWS SAM 액세스할 수 있도록 허용합니다. 자세한 내용은 *AWS Serverless Application Model 개발자 안내서*의 [권한](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html) 섹션을 참조하세요.

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

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

      ```
      codecatalyst-stack-role
      ```

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

1. 다음과 같이 스택 역할 ARN을 가져옵니다.

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

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

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

   1. **요약** 섹션에 표시된 **ARN** 값을 복사합니다. 나중에 필요합니다.

   이제 적절한 권한으로 스택 역할을 생성했으며 ARN을 획득했습니다.

## 3단계: CodeCatalyst에 AWS 역할 추가
<a name="deploy-tut-lambda-cfn-roles-add"></a>

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

**참고**  
스택 역할(`codecatalyst-stack-role`)을 연결에 추가할 필요가 없습니다. 이는 배포 역할을 사용하여 CodeCatalyst와 AWS 간에 연결이 이미 설정된 *후* *CloudFormation*(CodeCatalyst 아님)에서 스택 역할을 사용하기 때문입니다. 스택 역할은 CodeCatalyst에서 AWS에 대한 액세스 권한을 얻는 데 사용되지 않으므로 계정 연결과 연결할 필요가 없습니다.

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

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

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

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

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

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

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

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

1. 드롭다운 목록에서 `codecatalyst-build-role`을 선택하고 **역할 추가**를 선택합니다.

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

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

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

## 4단계: Amazon S3 버킷 생성
<a name="deploy-tut-lambda-cfn-s3"></a>

이 단계에서는 서버리스 애플리케이션의 배포 패키지 .zip 파일을 저장하는 Amazon S3 버킷을 생성합니다.

**Amazon S3 버킷을 생성하려면**

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

1. 기본 창에서 **버킷 생성**을 선택합니다.

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

   ```
   codecatalyst-cfn-s3-bucket
   ```

1. **AWS 리전**에서 리전을 선택합니다. 이 자습서에서는 **미국 서부(오리건) us-west-2**를 선택했다고 가정합니다. Amazon S3에서 지원되는 리전에 대한 자세한 내용은 *AWS 일반 참조*의 [Amazon Simple Storage Service 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/s3.html)을 참조하세요.

1. 페이지 맨 아래에 있는 **버킷 생성** 버튼을 선택합니다.

이제 미국 서부(오리건) us-west-2 리전에 **codecatalyst-cfn-s3-bucket** 버킷을 생성했습니다.

## 5단계: 소스 파일 추가
<a name="deploy-tut-lambda-cfn-files"></a>

이 단계에서는 CodeCatalyst 소스 리포지토리에 여러 애플리케이션 소스 파일을 추가합니다. `hello-world` 폴더에는 배포할 애플리케이션 파일이 포함되어 있습니다. `tests` 폴더에는 단위 테스트가 포함되어 있습니다. 폴더의 구조는 다음과 같습니다.

```
.
|— hello-world
|  |— tests
|     |— unit
|        |— test-handler.js
|  |— app.js
|— .npmignore
|— package.json
|— sam-template.yml
|— setup-sam.sh
```

### .npmignore 파일
<a name="deploy-tut-lambda-cfn-files-npmignore"></a>

`.npmignore` 파일은 npm이 애플리케이션 패키지에서 제외해야 하는 파일 및 폴더를 나타냅니다. 이 자습서에서는 npm이 애플리케이션의 일부가 아니기 때문에 `tests` 폴더를 제외합니다.

**.npmignore 파일을 추가하려면**

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

1. `codecatalyst-cfn-project` 프로젝트를 선택합니다.

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

1. 소스 리포지토리 목록에서 `codecatalyst-cfn-source-repository` 리포지토리를 선택합니다.

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

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

   ```
   .npmignore
   ```

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

   ```
   tests/*
   ```

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

   이제 리포지토리 루트에서 `.npmignore` 파일을 생성했습니다.

### package.json 파일
<a name="deploy-tut-lambda-cfn-files-package-json"></a>

`package.json` 파일에는 프로젝트 이름, 버전 번호, 설명, 종속성 및 애플리케이션과 상호 작용하고 실행하는 방법을 설명하는 기타 세부 정보와 같은 노드 프로젝트에 대한 중요한 메타데이터가 포함되어 있습니다.

`package.json` 이 자습서의 `test` 에는 종속성 목록과 스크립트가 포함되어 있습니다. 테스트 스크립트는 다음 작업을 수행합니다.
+ [mocha](https://mochajs.org/)를 사용하여 테스트 스크립트는 `hello-world/tests/unit/`에 지정된 단위 테스트를 실행하고 [xunit]() 리포터를 사용하여 `junit.xml` 파일에 결과를 기록합니다.
+ [이스탄불(nyc)](https://istanbul.js.org/)을 사용하면 테스트 스크립트가 [클로버](https://openclover.org/doc/manual/4.2.0/general--about-openclover.html) 리포터를 사용하여 코드 적용 범위 보고서(`clover.xml`)를 생성합니다. 자세한 내용은 이스탄불 설명서의 [대체 리포터 사용을](https://istanbul.js.org/docs/advanced/alternative-reporters/#clover) 참조하세요.

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

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

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

   ```
   package.json
   ```

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

   ```
   {
     "name": "hello_world",
     "version": "1.0.0",
     "description": "hello world sample for NodeJS",
     "main": "app.js",
     "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs",
     "author": "SAM CLI",
     "license": "MIT",
     "dependencies": {
       "axios": "^0.21.1",
       "nyc": "^15.1.0"
     },
     "scripts": {
       "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml"
     },
     "devDependencies": {
       "aws-sdk": "^2.815.0",
       "chai": "^4.2.0",
       "mocha": "^8.2.1"
     }
   }
   ```

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

   이제 리포지토리 루트에서 `package.json` 파일을 생성했습니다.

### sam-template.yml 파일
<a name="deploy-tut-lambda-cfn-files-sam-template-yml"></a>

`sam-template.yml` 파일에는 Lambda 함수 및 API Gateway를 배포하고 함께 구성하는 지침이 포함되어 있습니다. [AWS Serverless Application Model 템플릿 사양을](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification.html) 따르는 템플릿 CloudFormation 사양을 따릅니다.

는 유용한 [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) 리소스 유형을 AWS SAM 제공하기 때문에이 자습서 AWS SAM 에서는 일반 템플릿 대신 CloudFormation 템플릿을 사용합니다. 이 유형은 기본 CloudFormation 구문을 사용하기 위해 일반적으로 작성해야 하는 보이지 않는 구성을 다수 수행합니다. 예를 들어 `AWS::Serverless::Function`은 Lambda 함수, Lambda 실행 역할 및 함수를 시작하는 이벤트 소스 매핑을 생성합니다. 기본 CloudFormation 을 사용하여 작성하려면 이 모든 것을 코딩해야 합니다.

이 자습서에서는 미리 작성된 템플릿을 사용하지만 빌드 작업을 사용하여 워크플로의 일부로 템플릿을 생성할 수 있습니다. 자세한 내용은 [CloudFormation 스택 배포](deploy-action-cfn.md) 섹션을 참조하세요.

**sam-template.yml 파일을 추가하려면**

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

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

   ```
   sam-template.yml
   ```

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

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: >
     serverless-api
   
     Sample SAM Template for serverless-api
     
   # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
   Globals:
     Function:
       Timeout: 3
   
   Resources:
     HelloWorldFunction:
       Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
       Properties:
         CodeUri: hello-world/
         Handler: app.lambdaHandler
         Runtime: nodejs12.x
         Events:
           HelloWorld:
             Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
             Properties:
               Path: /hello
               Method: get
   
   Outputs:
     # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function
     # Find out about other implicit resources you can reference within AWS SAM at
     # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
     HelloWorldApi:
       Description: "API Gateway endpoint URL for the Hello World function"
       Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
     HelloWorldFunction:
       Description: "Hello World Lambda function ARN"
       Value: !GetAtt HelloWorldFunction.Arn
     HelloWorldFunctionIamRole:
       Description: "Implicit Lambda execution role created for the Hello World function"
       Value: !GetAtt HelloWorldFunctionRole.Arn
   ```

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

   이제 리포지토리의 루트 폴더 아래에 `sam-template.yml` 파일을 추가했습니다.

### setup-sam.sh 파일
<a name="deploy-tut-lambda-cfn-files-setup-sam"></a>

`setup-sam.sh` 파일에는 AWS SAM CLI 유틸리티 다운로드 및 설치 지침이 포함되어 있습니다. 워크플로는 이 유틸리티를 사용하여 `hello-world` 소스를 패키징합니다.

**setup-sam.sh 파일을 추가하려면**

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

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

   ```
   setup-sam.sh
   ```

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

   ```
   #!/usr/bin/env bash
   echo "Setting up sam"
   
   yum install unzip -y
   
   curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
   unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory
   
   ./sam-installation-directory/install; export AWS_DEFAULT_REGION=us-west-2
   ```

   앞의 코드에서 *us-west-2*를 AWS 리전으로 바꿉니다.

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

   이제 리포지토리 루트에서 `setup-sam.sh` 파일을 생성했습니다.

### app.js 파일
<a name="deploy-tut-lambda-cfn-files-app-js"></a>

`app.js`는 Lambda 함수 코드를 포함합니다. 이 자습서에서는 코드가 `hello world` 텍스트를 반환합니다.

**app.js 파일을 추가하려면**

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

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

   ```
   hello-world/app.js
   ```

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

   ```
   // const axios = require('axios')
   // const url = 'http://checkip.amazonaws.com/';
   let response;
   
   /**
    *
    * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
    * @param {Object} event - API Gateway Lambda Proxy Input Format
    *
    * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html 
    * @param {Object} context
    *
    * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
    * @returns {Object} object - API Gateway Lambda Proxy Output Format
    * 
    */
   exports.lambdaHandler = async (event, context) => {
       try {
           // const ret = await axios(url);
           response = {
               'statusCode': 200,
               'body': JSON.stringify({
                   message: 'hello world',
                   // location: ret.data.trim()
               })
           }
       } catch (err) {
           console.log(err);
           return err;
       }
   
       return response
   };
   ```

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

   이제 `hello-world` 폴더와 `app.js` 파일을 생성했습니다.

### test-handler.js 파일
<a name="deploy-tut-lambda-cfn-files-test-handler-js"></a>

`test-handler.js` 파일에는 Lambda 함수에 대한 단위 테스트가 포함되어 있습니다.

**test-handler.js 파일을 추가하려면**

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

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

   ```
   hello-world/tests/unit/test-handler.js
   ```

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

   ```
   'use strict';
   
   const app = require('../../app.js');
   const chai = require('chai');
   const expect = chai.expect;
   var event, context;
   
   describe('Tests index', function () {
       it('verifies successful response', async () => {
           const result = await app.lambdaHandler(event, context)
   
           expect(result).to.be.an('object');
           expect(result.statusCode).to.equal(200);
           expect(result.body).to.be.an('string');
   
           let response = JSON.parse(result.body);
   
           expect(response).to.be.an('object');
           expect(response.message).to.be.equal("hello world");
           // expect(response.location).to.be.an("string");
       });
   });
   ```

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

   이제 `hello-world/tests/unit` 폴더 아래에 `test-handler.js` 파일을 추가했습니다.

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

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

```
.
|— hello-world
|  |— tests
|     |— unit
|        |— test-handler.js
|  |— app.js
|— .npmignore
|— README.md
|— package.json
|— sam-template.yml
|— setup-sam.sh
```

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

이 단계에서는 Lambda 소스 코드를 패키징하고 배포하는 워크플로를 생성합니다. 워크플로는 순차적으로 실행되는 다음 구성 요소로 구성됩니다.
+ 트리거 - 이 트리거는 소스 리포지토리에 변경 사항을 푸시할 때 워크플로 실행을 자동으로 시작합니다. 트리거에 대한 자세한 내용은 [트리거를 사용하여 워크플로 실행 자동 시작](workflows-add-trigger.md) 주제를 참조하세요.
+ 테스트 작업(`Test`) - 트리거 시 이 작업은 [노드 패키지 관리자(npm)](https://www.npmjs.com/)를 설치한 다음 `npm run test` 명령을 실행합니다. 이 명령은 `package.json` 파일에 정의된 `test` 스크립트를 실행하도록 npm에 지시합니다. `test` 스크립트는 다시 단위 테스트를 실행하고 테스트 보고서(`junit.xml`)와 코드 적용 범위 보고서(`clover.xml`)의 두 가지 보고서를 생성합니다. 자세한 내용은 [package.json 파일](#deploy-tut-lambda-cfn-files-package-json) 섹션을 참조하세요.

  다음으로 테스트 작업은 XML 보고서를 CodeCatalyst 보고서로 변환하고 테스트 작업의 **보고서** 탭 아래 CodeCatalyst 콘솔에 표시합니다.

  테스트 작업에 대한 자세한 내용은 [워크플로를 사용한 테스트워크플로를 사용한 테스트](test-workflow-actions.md) 섹션을 참조하세요.
+ 빌드 작업(`BuildBackend`) - 테스트 작업이 완료되면 빌드 작업은 AWS SAM CLI를 다운로드하여 설치하고, `hello-world` 소스를 패키징하고, 패키지를 Lambda 서비스가 예상하는 Amazon S3 버킷에 복사합니다. 또한 작업은 라는 새 AWS SAM 템플릿 파일을 출력`sam-template-packaged.yml`하여 라는 출력 아티팩트에 배치합니다`buildArtifact`.

  빌드 작업에 대한 자세한 내용은 [워크플로로 빌드하기](build-workflow-actions.md) 섹션을 참조하세요.
+ 배포 작업(`DeployCloudFormationStack`) - 빌드 작업이 완료되면 배포 작업은 빌드 작업()에서 생성된 출력 아티팩트를 찾고 그 안의 AWS SAM 템플릿을 `buildArtifact`찾은 다음 템플릿을 실행합니다. AWS SAM 템플릿은 서버리스 애플리케이션을 배포하는 스택을 생성합니다.

**워크플로 생성**

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

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

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

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

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

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

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

   ```
   Name: codecatalyst-cfn-workflow
   SchemaVersion: 1.0
   
   Triggers:
     - Type: PUSH
       Branches:
         - main   
   Actions:
     Test:
       Identifier: aws/managed-test@v1
       Inputs:
         Sources:
           - WorkflowSource
       Outputs:
         Reports:
           CoverageReport:
             Format: CLOVERXML
             IncludePaths:
               - "coverage/*"
           TestReport:
             Format: JUNITXML
             IncludePaths:
               - junit.xml
       Configuration:
         Steps:
           - Run: npm install
           - Run: npm run test  
     BuildBackend:
       Identifier: aws/build@v1
       DependsOn:
         - Test
       Environment:
         Name: codecatalyst-cfn-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-build-role
       Inputs:
         Sources:
           - WorkflowSource
       Configuration: 
         Steps:
           - Run: . ./setup-sam.sh
           - Run: sam package --template-file sam-template.yml --s3-bucket codecatalyst-cfn-s3-bucket --output-template-file sam-template-packaged.yml --region us-west-2
       Outputs:
         Artifacts:
           - Name: buildArtifact
             Files:
               - "**/*"
     DeployCloudFormationStack:
       Identifier: aws/cfn-deploy@v1
       DependsOn: 
         - BuildBackend
       Environment:
         Name: codecatalyst-cfn-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-deploy-role
       Inputs:
         Artifacts:
           - buildArtifact
         Sources: []
       Configuration:
         name: codecatalyst-cfn-stack
         region: us-west-2
         role-arn: arn:aws:iam::111122223333:role/StackRole
         template: ./sam-template-packaged.yml
         capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND
   ```

   앞의 코드에서
   + *codecatalyst-cfn-environment* 인스턴스 두 개를 모두 에서 생성한 환경 이름으로 바꿉니다.
   + *codecatalyst-account-connection* 인스턴스 두 개를 모두 계정 연결의 표시 이름으로 바꿉니다. 표시 이름은 숫자일 수 있습니다. 자세한 내용은 [3단계: CodeCatalyst에 AWS 역할 추가](#deploy-tut-lambda-cfn-roles-add) 섹션을 참조하세요.
   + [2단계: AWS 역할 생성](#deploy-tut-lambda-cfn-roles)에서 생성한 빌드 역할의 이름을 갖는 *codecatalyst-build-role*.
   + [4단계: Amazon S3 버킷 생성](#deploy-tut-lambda-cfn-s3)에서 생성한 Amazon S3 버킷의 이름을 갖는 *codecatalyst-cfn-s3-bucket*입니다.
   + Amazon S3 버킷이 있는 리전(첫 번째 인스턴스)과 스택이 배포될 리전(두 번째 인스턴스)이 있는 *us-west-2*의 두 인스턴스 모두. 이러한 리전은 다를 수 있습니다. 이 자습서에서는 두 리전이 모두 `us-west-2`로 설정되어 있다고 가정합니다. Amazon S3 및에서 지원하는 리전에 대한 자세한 내용은의 서비스 엔드포인트 및 할당량을 CloudFormation참조하세요*AWS 일반 참조*. [https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 
   + [2단계: AWS 역할 생성](#deploy-tut-lambda-cfn-roles)에서 생성한 배포 역할의 이름을 갖는 *codecatalyst-deploy-role*.
   + [사전 조건](#deploy-tut-lambda-cfn-prereqs)에서 생성한 환경 이름을 갖는 *codecatalyst-cfn-environment*.
   + [2단계: AWS 역할 생성](#deploy-tut-lambda-cfn-roles)에서 생성한 스택 역할의 Amazon 리소스 이름(ARN)을 갖는 *arn:aws:iam::111122223333:role/StackRole*.
**참고**  
빌드, 배포 및 스택 역할을 생성하지 않기로 결정한 경우 *codecatalyst-build-role*, *codecatalyst-deploy-role*및 *arn:aws:iam::111122223333:role/StackRole*을 `CodeCatalystWorkflowDevelopmentRole-spaceName` 역할의 이름 또는 ARN으로 바꿉니다. 이에 대한 자세한 내용은 [2단계: AWS 역할 생성](#deploy-tut-lambda-cfn-roles) 섹션을 참조하세요.

   이전에 표시된 코드의 속성에 대한 자세한 내용은 섹션을 참조하세요['스 CloudFormation 택 배포' 작업 YAML](deploy-action-ref-cfn.md).

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

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

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

   1. **워크플로 파일 이름**의 경우 기본값인 `codecatalyst-cfn-workflow`를 유지합니다.

   1. **커밋 메시지**에 다음을 입력합니다.

      ```
      add initial workflow file
      ```

   1. **리포지토리**에서 **codecatalyst-cfn-source-repositor **를 선택합니다.

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

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

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

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

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

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

1. **실행** 탭을 선택합니다.

1. **실행 ID** 열에서 실행 ID를 선택합니다.

1. **테스트**를 선택하여 테스트 진행 상황을 확인합니다.

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

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

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

1. **DeployCloudFormationStack** 작업이 완료되면 다음을 수행합니다.
   + 워크플로 실행에 성공한 경우 다음 절차로 이동합니다.
   + **테스트** 또는 **BuildBackend** 작업에서 워크플로 실행이 실패한 경우 **로그**를 선택하여 문제를 해결합니다.
   + **DeployCloudFormationStack** 작업에서 워크플로 실행이 실패한 경우 배포 작업을 선택한 다음 **요약** 탭을 선택합니다. **CloudFormation 이벤트** 섹션으로 스크롤하여 자세한 오류 메시지를 확인합니다. 롤백이 발생한 경우 워크플로를 다시 실행하기 전에에서 CloudFormation AWS 콘솔을 통해 `codecatalyst-cfn-stack` 스택을 삭제합니다.

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

1. 성공적으로 배포한 후 상단 근처의 가로 메뉴 모음에서 **변수(7)**를 선택합니다. (오른쪽 창에서 **변수를** 선택하지 마세요.)

1. **HelloWorldApi** 옆에 `https://` URL을 브라우저에 붙여 넣습니다.

   Lambda 함수의 **hello world** JSON 메시지가 표시되며, 이는 워크플로가 Lambda 함수 및 API Gateway를 성공적으로 배포하고 구성했음을 나타냅니다.
**작은 정보**  
CodeCatalyst가 몇 가지 작은 구성으로 워크플로 다이어그램에 이 URL을 표시하도록 할 수 있습니다. 자세한 내용은 [워크플로 다이어그램에 앱 URL 표시](deploy-app-url.md) 섹션을 참조하세요.

**단위 테스트 결과 및 코드 적용 범위를 확인하려면**

1. 워크플로 다이어그램에서 **테스트**를 선택한 다음 **보고서**를 선택합니다.

1. **TestReport**를 선택하여 단위 테스트 결과를 보거나 **CoverageReport**를 선택하여 테스트 중인 파일의 코드 적용 범위 세부 정보를 봅니다. 이 경우 `app.js` 및 `test-handler.js`입니다.

**배포된 리소스를 확인하려면**

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

1.  AWS SAM 템플릿이 생성한 **codecatalyst-cfn-stack** API를 관찰합니다. API 이름은 워크플로 정의 파일(`codecatalyst-cfn-workflow.yaml`)의 `Configuration/name` 값에서 가져옵니다.

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) AWS Lambda 콘솔을 엽니다.

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

1. `codecatalyst-cfn-stack-HelloWorldFunction-string` Lambda 함수를 선택합니다.

1. API Gateway가 함수의 트리거인 방법을 확인할 수 있습니다. 이 통합은 리소스 유형에 따라 AWS SAM `AWS::Serverless::Function` 자동으로 구성되었습니다.

## 7단계: 변경
<a name="deploy-tut-lambda-cfn-change"></a>

이 단계에서는 Lambda 소스 코드를 변경하고 커밋합니다. 이 커밋은 새 워크플로 실행을 시작합니다. 이 실행은 Lambda 콘솔에 지정된 기본 트래픽 이동 구성을 사용하는 청록색 체계로 새 Lambda 함수를 배포합니다.

**Lambda 소스를 변경하려면**

1. CodeCatalyst에서 프로젝트로 이동합니다.

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

1. `codecatalyst-cfn-source-repository` 소스 리포지토리를 선택합니다.

1. 애플리케이션 파일 변경:

   1. `hello-world` 폴더를 선택합니다.

   1. `app.js` 파일을 선택합니다.

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

   1. 23번 줄에서 `hello world`를 **Tutorial complete\$1**로 변경합니다.

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

      커밋으로 인해 워크플로 실행이 시작됩니다. 이름 변경을 반영하도록 단위 테스트를 업데이트하지 않았기 때문에 이 실행은 실패합니다.

1. 단위 테스트를 업데이트합니다.

   1. `hello-world\tests\unit\test-handler.js`을 선택합니다.

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

   1. 19번 줄에서 `hello world`를 **Tutorial complete\$1**로 변경합니다.

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

      커밋으로 인해 다른 워크플로 실행이 시작됩니다. 이 실행이 성공합니다.

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

1. `codecatalyst-cfn-workflow`를 선택한 다음 **실행**을 선택합니다.

1. 최신 실행의 실행 ID를 선택합니다. 상태는 진행 중이어야 합니다.

1. **테스트,** **BuildBackend** 및 **DeployCloudFormationStack**을 선택하여 워크플로 실행 진행 상황을 확인합니다.

1. 워크플로가 완료되면 상단 근처의 **변수(7)**를 선택합니다.

1. **HelloWorldApi** 옆에 `https://` URL을 브라우저에 붙여 넣습니다.

   새 애플리케이션이 성공적으로 배포되었음을 나타내는 `Tutorial complete!` 메시지가 브라우저에 나타납니다.

## 정리
<a name="deploy-tut-lambda-cfn-clean-up"></a>

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

**CodeCatalyst 콘솔에서 정리하려면**

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

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

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

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

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

**에서 정리하려면 AWS Management Console**

1. 다음과 같이 CloudFormation에서 정리합니다.

   1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

   1. `codecatalyst-cfn-stack`를 삭제합니다.

      스택을 삭제하면 API Gateway 및 Lambda 서비스에서 모든 자습서 리소스가 제거됩니다.

1. 다음과 같이 Amazon S3에서 정리합니다.

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

   1. `codecatalyst-cfn-s3-bucket`을 선택합니다.

   1. 버킷 콘텐츠를 삭제합니다.

   1.  버킷을 삭제합니다.

1. 다음과 같이 IAM에서 정리합니다.

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

   1. `codecatalyst-deploy-policy`를 삭제합니다.

   1. `codecatalyst-build-policy`를 삭제합니다.

   1. `codecatalyst-stack-policy`를 삭제합니다.

   1. `codecatalyst-deploy-role`를 삭제합니다.

   1. `codecatalyst-build-role`를 삭제합니다.

   1. `codecatalyst-stack-role`를 삭제합니다.

이 자습서에서는 CodeCatalyst 워크플로 및 스택 배포 작업을 사용하여 서버리스 애플리케이션을 CloudFormation ** CloudFormation 스택으로 배포**하는 방법을 배웠습니다.

# '스 CloudFormation 택 배포' 작업 추가
<a name="deploy-action-cfn-adding"></a>

다음 지침에 따라 ** CloudFormation 스택 배포** 작업을 워크플로에 추가합니다.

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

**시각적 편집기를 사용하여 '스 CloudFormation 택 배포' 작업을 추가하려면**

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**YAML 편집기를 사용하여 '스 CloudFormation 택 배포' 작업을 추가하려면**

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

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

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

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

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

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

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

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

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

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

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

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

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

------

# 롤백 구성
<a name="deploy-consumption-enable-alarms"></a>

기본적으로 ** CloudFormation 스택 배포** 작업이 실패하면 CloudFormation 가 스택을 마지막으로 알려진 안정 상태로 롤백합니다. 작업이 실패할 때뿐만 아니라 지정된 Amazon CloudWatch 경보가 발생할 때 롤백이 발생하도록 동작을 변경할 수 있습니다. CloudWatch 경보에 대한 자세한 내용을 알아보려면 *Amazon CloudWatch 사용 설명서*의 [Amazon CloudWatch 경보 사용](https://docs.aws.amazon.com/)을 참조하세요.

작업이 실패할 때 CloudFormation이 스택을 롤백하지 않도록 기본 동작을 변경할 수도 있습니다.

다음 지침에 따라 롤백을 구성합니다.

**참고**  
롤백을 수동으로 시작할 수 없습니다.

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

**시작하기 전 준비 사항**

1. 작동하는 ** CloudFormation 스택 배포** 작업이 포함된 [워크플로](workflow.md)가 있는지 확인합니다. 자세한 내용은 [CloudFormation 스택 배포](deploy-action-cfn.md) 단원을 참조하십시오.

1. **스택 배포 작업의 스택 역할 - 선택적** 필드에 지정된 역할에 **CloudWatchFullAccess** 권한을 포함해야 합니다. ** CloudFormation ** 적절한 권한이 있는 역할 생성에 대한 자세한 내용은 [2단계: AWS 역할 생성](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles)을 참조하세요.

**'스 CloudFormation 택 배포' 작업에 대한 롤백 경보를 구성하려면**

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

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

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

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

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

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

1. ** CloudFormation 스택 배포** 작업을 선택합니다.

1. 세부 정보 창에서 **구성**을 선택합니다.

1. 하단에서 **고급**을 확장합니다.

1. **경보 ARN 모니터링**에서 **경보 추가**를 선택합니다.

1. 다음 필드에 정보를 입력합니다.
   + **경보 ARN**

     롤백 트리거를 추가하려면 Amazon CloudWatch 경보의 Amazon 리소스 이름(ARN)을 지정합니다. 예를 들어 `arn:aws:cloudwatch::123456789012:alarm/MyAlarm`입니다. 최대 5개의 롤백 트리거를 가질 수 있습니다.
**참고**  
CloudWatch 경보 ARN을 지정하는 경우 작업이 CloudWatch에 액세스할 수 있도록 추가 권한도 구성해야 합니다. 자세한 내용은 [롤백 구성](#deploy-consumption-enable-alarms) 섹션을 참조하세요.
   + **모니터링 시간**

     CloudFormation이 지정된 경보를 모니터링하는 데 걸리는 시간을 0\$1180분으로 지정합니다. 모니터링은 모든 스택 리소스가 배포된 *후* 시작됩니다. 지정된 모니터링 시간 내에 경보가 발생하면 배포가 실패하고 CloudFormation이 전체 스택 작업을 롤백합니다.

     기본값: 0. CloudFormation은 스택 리소스가 배포되는 동안에만 경보를 모니터링하며 이후는 모니터링하지 않습니다.

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

**' CloudFormation 스택 배포' 작업에 대한 롤백 트리거를 구성하려면**

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

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

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

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

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

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

1. YAML 코드에 `monitor-alarm-arns` 및 `monitor-timeout-in-minutes` 속성을 추가하여 롤백 트리거를 추가합니다. 각 속성에 대한 설명은 ['스 CloudFormation 택 배포' 작업 YAML](deploy-action-ref-cfn.md) 섹션을 참조하세요.

1. ** CloudFormation 스택 배포** 작업의 `role-arn` 속성에 지정된 역할에서 **CloudWatchFullAccess** 권한을 포함해야 합니다. 적절한 권한이 있는 역할 생성에 대한 자세한 내용은 [2단계: AWS 역할 생성](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles)을 참조하세요.

------

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

**' CloudFormation 스택 배포' 작업에 대한 롤백을 끄려면**

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

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

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

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

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

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

1. ** CloudFormation 스택 배포** 작업을 선택합니다.

1. 세부 정보 창에서 **구성**을 선택합니다.

1. 하단에서 **고급**을 확장합니다.

1. **롤백 비활성화**를 켭니다.

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

**' CloudFormation 스택 배포' 작업에 대한 롤백을 끄려면**

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

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

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

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

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

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

1. 롤백을 중지하려면 YAML 코드에 `disable-rollback: 1` 속성을 추가합니다. 이 속성에 대한 설명은 ['스 CloudFormation 택 배포' 작업 YAML](deploy-action-ref-cfn.md) 섹션을 참조하세요.

------

# '스 CloudFormation 택 배포' 변수
<a name="deploy-action-cfn-variables"></a>

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

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


| Key(키) | 값 | 
| --- | --- | 
|  deployment-platform  |  배포 플랫폼의 이름입니다. `AWS:CloudFormation`로 하드코딩되었습니다.  | 
|  리전  |  워크플로 실행 중에에 배포 AWS 리전 된의 리전 코드입니다. 예시: `us-west-2`  | 
|  stack-id  |  배포 작업의 Amazon 리소스 이름(ARN)입니다. 예시: `arn:aws:cloudformation:us-west-2:111122223333:stack/codecatalyst-cfn-stack/6aad4380-100a-11ec-a10a-03b8a84d40df`  | 

# '스 CloudFormation 택 배포' 작업 YAML
<a name="deploy-action-ref-cfn"></a>

다음은 ** CloudFormation 스택 배포** 작업의 YAML 정의입니다. 이러한 작업 사용 방법을 배우려면 [CloudFormation 스택 배포](deploy-action-cfn.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.    
  DeployCloudFormationStack:  
    Identifier: aws/cfn-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: DeployRole
    Inputs:
      Sources:
        - source-name-1
      Artifacts:
        - CloudFormation-artifact
    Configuration:
      name: stack-name
      region: us-west-2
      template: template-path
      role-arn: arn:aws:iam::123456789012:role/StackRole        
      capabilities: CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND
      parameter-overrides: KeyOne=ValueOne,KeyTwo=ValueTwo | path-to-JSON-file
      no-execute-changeset: 1|0
      fail-on-empty-changeset: 1|0
      disable-rollback: 1|0
      termination-protection: 1|0
      timeout-in-minutes: minutes
      notification-arns: arn:aws:sns:us-east-1:123456789012:MyTopic,arn:aws:sns:us-east-1:123456789012:MyOtherTopic
      monitor-alarm-arns: arn:aws:cloudwatch::123456789012:alarm/MyAlarm,arn:aws:cloudwatch::123456789012:alarm/MyOtherAlarm
      monitor-timeout-in-minutes: minutes       
      tags: '[{"Key":"MyKey1","Value":"MyValue1"},{"Key":"MyKey2","Value":"MyValue2"}]'
```

## DeployCloudFormationStack
<a name="deploy.action.cfn.deploycloudformationstack"></a>

(필수)

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

기본값: `DeployCloudFormationStack_nn`.

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

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

(*DeployCloudFormationStack*/**Identifier**)

(필수)

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

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

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

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

(*DeployCloudFormationStack*/**DependsOn**)

(선택 사항)

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

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

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

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

(*DeployCloudFormationStack*/**Compute**)

(선택 사항)

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

해당 UI: *없음*

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

(*DeployCloudFormationStack*/Compute/**Type**)

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

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

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

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

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

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

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

(*DeployCloudFormationStack*/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.cfn.timeout"></a>

(*DeployCloudFormationStack*/**Timeout**)

(선택 사항)

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

해당 UI: 구성 탭/**제한 시간을 분 단위로 표시 - 선택 사항 **

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

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

(*DeployCloudFormationStack*/Environment/**Name**)

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

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

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

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

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

(*DeployCloudFormationStack*/Environment/Connections/**Name**)

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

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

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

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

(*DeployCloudFormationStack*/Environment/Connections/**Role**)

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

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

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

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

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

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

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

(*DeployCloudFormationStack*/**Inputs**)

(선택 사항)

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

**참고**  
** CloudFormation 스택 배포** 작업당 최대 4개의 입력(소스 1개 및 아티팩트 3개)이 허용됩니다.

서로 다른 입력(소스 및 아티팩트)에 있는 파일을 참조해야 하는 경우 소스 입력은 기본 입력이고 아티팩트는 보조 입력입니다. 보조 입력의 파일에 대한 참조는 특수 접두사를 사용하여 기본 입력에서 파일을 구분합니다. 자세한 내용은 [예시: 여러 아티팩트에서 파일 참조](workflows-working-artifacts-ex.md#workflows-working-artifacts-ex-ref-file)을 참조하세요.

해당 UI: **입력** 탭

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

(*DeployCloudFormationStack*/Inputs/**Sources**)

(CloudFormation 또는 AWS SAM 템플릿이 소스 리포지토리에 저장된 경우 필수)

CloudFormation 또는 AWS SAM 템플릿이 소스 리포지토리에 저장되어 있는 경우 해당 소스 리포지토리의 레이블을 지정합니다. 현재, `WorkflowSource` 레이블만 지원됩니다.

CloudFormation 또는 AWS SAM 템플릿이 소스 리포지토리에 포함되지 않은 경우 다른 작업에서 생성된 아티팩트 또는 Amazon S3 버킷에 있어야 합니다.

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

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

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

(*DeployCloudFormationStack*/Inputs/**Artifacts**)

(CloudFormation 또는 AWS SAM 템플릿이 이전 작업의 [출력 아티팩트](workflows-working-artifacts-output.md)에 저장된 경우 필수)

배포하려는 CloudFormation 또는 AWS SAM 템플릿이 이전 작업에서 생성된 아티팩트에 포함된 경우 여기에 해당 아티팩트를 지정합니다. CloudFormation 템플릿이 아티팩트 내에 포함되어 있지 않은 경우 소스 리포지토리 또는 Amazon S3 버킷에 있어야 합니다.

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

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

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

(*DeployCloudFormationStack*/**Configuration**)

(필수)

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

해당 UI: **구성** 탭

## name
<a name="deploy.action.cfn.stackname"></a>

(*DeployCloudFormationStack*/Configuration/**name**)

(필수)

** CloudFormation 스택 배포** 작업이 생성하거나 업데이트하는 CloudFormation 스택의 이름을 지정합니다.

해당 UI: 구성 탭/**스택 이름**

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

(*DeployCloudFormationStack*/Configuration/**region**)

(필수)

스택을 배포할 AWS 리전 를 지정합니다. 리전 코드 목록은 [리전 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#region-names-codes)를 참조하세요.

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

## template
<a name="deploy.action.cfn.templatepath"></a>

(*DeployCloudFormationStack*/Configuration/**template**)

(필수)

CloudFormation 또는 AWS SAM 템플릿 파일의 이름과 경로를 지정합니다. 템플릿은 JSON 또는 YAML 형식일 수 있으며 소스 리포지토리, 이전 작업의 아티팩트 또는 Amazon S3 버킷에 상주할 수 있습니다. 템플릿 파일이 소스 리포지토리 또는 아티팩트에 있는 경우 경로는 소스 또는 아티팩트 루트를 기준으로 합니다. 템플릿이 Amazon S3 버킷에 있는 경우 경로는 템플릿의 **객체 URL** 값입니다.

예시:

`./MyFolder/MyTemplate.json`

`MyFolder/MyTemplate.yml`

`https://MyBucket.s3.us-west-2.amazonaws.com/MyTemplate.yml`

**참고**  
템플릿의 파일 경로에 접두사를 추가하여 찾을 아티팩트 또는 소스를 나타내야 할 수 있습니다. 자세한 내용은 [소스 리포지토리 파일 참조](workflows-sources-reference-files.md) 및 [아티팩트의 파일 참조](workflows-working-artifacts-refer-files.md) 섹션을 참조하세요.

해당 UI: 구성 탭/**템플릿**

## role-arn
<a name="deploy.action.cfn.stackrolearn"></a>

(*DeployCloudFormationStack*/Configuration/**role-arn**)

(필수)

스택 역할의 Amazon 리소스 이름(ARN)을 지정합니다. CloudFormation은 이 역할을 사용하여 스택의 리소스에 액세스하고 수정합니다. 예시: `arn:aws:iam::123456789012:role/StackRole`.

스택 역할에 다음이 포함되어 있는지 확인합니다.
+ 하나 이상의 권한 정책. 정책은 스택에 있는 리소스에 따라 달라집니다. 예를 들어 스택에 AWS Lambda 함수가 포함된 경우 Lambda에 대한 액세스 권한을 부여하는 권한을 추가해야 합니다. [자습서: 서버리스 애플리케이션 배포](deploy-tut-lambda.md)에 설명된 자습서를 따른 경우 일반적인 서버리스 애플리케이션 스택을 배포할 때 스택 역할에 필요한 권한을 나열하는 [스택 역할을 생성하려면](deploy-tut-lambda.md#deploy-tut-lambda-cfn-roles-stack) 프로시저가 포함됩니다.
**주의**  
스택의 리소스에 액세스하기 위해 CloudFormation 서비스에 필요한 권한으로 권한을 제한합니다. 더 광범위한 권한을 가진 역할을 사용하면 보안 위험이 발생할 수 있습니다.
+ 다음 신뢰 정책:

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

****  

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

------

필요에 따라 이 역할을 계정 연결에 연결합니다. IAM 역할을 계정 연결과 연결하는 방법에 대한 자세한 내용은 [계정 연결에 IAM 역할 추가](ipa-connect-account-addroles.md) 섹션을 참조하세요. 스택 역할을 계정 연결과 연결하지 않으면 스택 역할이 시각적 편집기의 **스택 역할** 드롭다운 목록에 표시되지 않지만 YAML 편집기를 사용하여 `role-arn` 필드에 역할 ARN을 계속 지정할 수 있습니다.

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

해당 UI: 구성 탭/**스택 역할 - 선택 사항**

## capabilities
<a name="deploy.action.cfn.capabilities"></a>

(*DeployCloudFormationStack*/Configuration/**capabilities**)

(필수)

가 특정 스택을 CloudFormation 생성하도록 허용하는 데 필요한 IAM 기능 목록을 지정합니다. 대부분의 경우 `CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND`의 기본값인 `capabilities`를 그대로 둡니다.

** CloudFormation 스택 배포** 작업의 로그에 `##[error] requires capabilities: [capability-name]` 오류가 표시되면 문제를 해결하는 방법에 대한 자세한 내용은 [IAM 기능 오류를 해결하려면 어떻게 해야 하나요?](troubleshooting-workflows.md#troubleshooting-workflows-capabilities) 섹션을 참조하세요.

IAM 기능에 대한 자세한 내용은 [IAM 사용 설명서의 CloudFormation 템플릿에서 IAM 리소스 확인을](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities) 참조하세요. ** 

해당 UI: 구성 탭/고급/**기능**

## parameter-overrides
<a name="deploy.action.cfn.parameter.overrides"></a>

(*DeployCloudFormationStack*/Configuration/**parameter-overrides**)

(선택 사항)

 CloudFormation 또는 AWS SAM 템플릿에서 기본값이 없거나 기본값이 아닌 값을 지정하려는 파라미터를 지정합니다. 파라미터에 대한 자세한 내용은 * AWS CloudFormation 사용 설명서*의 [파라미터를](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) 참조하세요.

`parameter-overrides` 속성은 다음을 허용합니다.
+ 파라미터와 값이 포함된 JSON 파일입니다.
+ 파라미터 및 값의 쉼표로 구분된 목록입니다.

**JSON 파일을 지정하려면**

1. JSON 파일이 다음 구문 중 하나를 사용하는지 확인합니다.

   ```
   {
     "Parameters": {
       "Param1": "Value1",
       "Param2": "Value2",
       ...
     }
   }
   ```

   또는…

   ```
   [
     {
        "ParameterKey": "Param1",
        "ParameterValue": "Value1"
     },
     ...
   ]
   ```

   (다른 구문이 있지만 작성 시 CodeCatalyst에서 지원하지 않습니다.) JSON 파일에서 CloudFormation 파라미터를 지정하는 방법에 대한 자세한 내용은 *AWS CLI 명령 참조* 의 [지원되는 JSON 구문](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/deploy/index.html#supported-json-syntax)을 참조하세요.

1. 다음 형식 중 하나를 사용하여 JSON 파일의 경로를 지정합니다.
   + JSON 파일이 이전 작업의 출력 아티팩트에 있는 경우 다음을 사용합니다.

     `file:///artifacts/current-action-name/output-artifact-name/path-to-json-file`

     자세한 내용은 **예시 1**을 참조하세요.
   + JSON 파일이 소스 리포지토리에 있는 경우 다음을 사용합니다.

     `file:///sources/WorkflowSource/path-to-json-file`

     자세한 내용은 **예시 2**를 참조하세요.

     **예시 1** - JSON 파일은 출력 아티팩트에 있습니다.

     ```
     ##My workflow YAML
     ...
     Actions:
       MyBuildAction:
         Identifier: aws/build@v1
         Outputs:
           Artifacts:
             - Name: ParamArtifact
               Files:
                 - params.json
         Configuration:
         ...
       MyDeployCFNStackAction:
         Identifier: aws/cfn-deploy@v1
         Configuration:
           parameter-overrides: file:///artifacts/MyDeployCFNStackAction/ParamArtifact/params.json
     ```

     **예시 2** - JSON 파일은 소스 리포지토리의 `my/folder` 폴더에 있습니다.

     ```
     ##My workflow YAML
     ...
     Actions:
       MyDeployCloudFormationStack:
         Identifier: aws/cfn-deploy@v1
         Inputs:
           Sources:
             - WorkflowSource
         Configuration:
           parameter-overrides: file:///sources/WorkflowSource/my/folder/params.json
     ```

**쉼표로 구분된 파라미터 목록을 사용하려면**
+ 다음 형식을 사용하여 `parameter-overrides` 속성에 파라미터 이름-값 페어를 추가합니다.

  `param-1=value-1,param-2=value-2`

  예를 들어 다음 CloudFormation 템플릿을 가정합니다.

  ```
  ##My CloudFormation template
  
  Description: My CloudFormation template
  
  Parameters:
    InstanceType:
      Description: Defines the Amazon EC2 compute for the production server.
      Type: String
      Default: t2.micro
      AllowedValues:
        - t2.micro
        - t2.small
        - t3.medium
      
  Resources:
  ...
  ```

  ... 다음과 같이 `parameter-overrides` 속성을 설정할 수 있습니다.

  ```
  ##My workflow YAML
  ...
  Actions:
  ...
    DeployCloudFormationStack:
      Identifier: aws/cfn-deploy@v1
      Configuration:
        parameter-overrides: InstanceType=t3.medium,UseVPC=true
  ```
**참고**  
`undefined` 값을 사용하여 해당 값 없이 파라미터 이름을 지정할 수 있습니다. 예제:  
`parameter-overrides: MyParameter=undefined`  
 그 효과는 스택 업데이트 중에 CloudFormation이 지정된 파라미터 이름에 기존 파라미터 값을 사용한다는 것입니다.

해당 UI:
+ 구성 탭/고급/**파라미터 재정의**
+ 구성 탭/고급/파라미터 재정의/**파일을 사용하여 재정의 지정**
+ 구성 탭/고급/파라미터 재정의/**값 세트를 사용하여 재정의 지정**

## no-execute-changeset
<a name="deploy.action.cfn.noexecutechangeset"></a>

(*DeployCloudFormationStack*/Configuration/**no-execute-changeset**)

(선택 사항)

CodeCatalyst가 CloudFormation 변경 세트를 생성한 다음 실행하기 전에 중지할지 여부를 지정합니다. 이렇게 하면 CloudFormation 콘솔에서 변경 세트를 검토할 수 있습니다. 변경 세트가 양호한 것으로 판단되면 이 옵션을 비활성화한 다음 워크플로를 다시 실행하여 CodeCatalyst가 중지 없이 변경 세트를 생성하고 실행할 수 있도록 합니다. 기본값은 중지 없이 변경 세트를 생성하고 실행하는 것입니다. 자세한 내용은 *AWS CLI 명령* 참조의 CloudFormation [배포](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html) 파라미터를 참조하세요. 변경 세트 보기에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [변경 세트 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets-view.html)를 참조하세요.

해당 UI: 구성 탭/고급/**변경 세트 실행 안 함**

## fail-on-empty-changeset
<a name="deploy.action.cfn.failonemptychangeset"></a>

(*DeployCloudFormationStack*/Configuration/**fail-on-empty-changeset**)

(선택 사항)

CloudFormation 변경 세트가 비어 있는 경우 CodeCatalyst가 ** CloudFormation 스택 배포** 작업에 실패할지 여부를 지정합니다. (변경 세트가 비어 있으면 최신 배포 중에 스택에 변경 사항이 없음을 의미합니다.) 기본값은 변경 세트가 비어 있는 경우 작업을 진행하도록 허용하고 스택이 업데이트되지 않았더라도 `UPDATE_COMPLETE` 메시지를 반환하는 것입니다.

이 설정에 대한 자세한 내용은 *AWS CLI 명령* 참조의 CloudFormation [배포](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html) 파라미터를 참조하세요. 변경 집합에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [변경 집합을 사용하여 스택 업데이트](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)를 참조하세요.

해당 UI: 구성 탭/고급/**빈 변경 사항 세트 실패**

## disable-rollback
<a name="deploy.action.cfn.disablerollback"></a>

(*DeployCloudFormationStack*/Configuration/**disable-rollback**)

(선택 사항)

CodeCatalyst가 스택 배포가 실패할 경우 롤백할지 여부를 지정합니다. 롤백은 스택을 마지막으로 알려진 안정 상태로 반환합니다. 기본값은 롤백을 활성화하는 것입니다. 이 설정에 대한 자세한 내용은 *AWS CLI 명령* 참조의 CloudFormation [배포](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html) 파라미터를 참조하세요.

** CloudFormation 스택 배포** 작업이 롤백을 처리하는 방법에 대한 자세한 내용은 섹션을 참조하세요[롤백 구성](deploy-consumption-enable-alarms.md).

스택 롤백에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [스택 실패 옵션](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html)을 참조하세요.

해당 UI: 구성 탭/고급/**롤백 비활성화**

## termination-protection
<a name="deploy.action.cfn.terminationprotection"></a>

(*DeployCloudFormationStack*/Configuration/**termination-protection**)

(선택 사항)

**배포 스택이 배포 중인 CloudFormation 스택**에 종료 방지 기능을 추가할지 여부를 지정합니다. 종료 방지 기능이 활성화된 스택을 삭제하려고 시도하면 삭제가 실패하고 스택은 상태를 포함하여 변함없이 그대로 유지됩니다. 종료 방지 기능은 기본적으로 비활성화됩니다. 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [스택이 삭제되지 않도록 보호](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html)를 참조하세요.

해당 UI: 구성 탭/고급/**종료 보호**

## timeout-in-minutes
<a name="deploy.action.cfn.timeoutinminutes"></a>

(*DeployCloudFormationStack*/Configuration/**timeout-in-minutes**)

(선택 사항)

스택 생성 작업 시간이 초과되어 스택 상태를 `CREATE_FAILED`로 설정하기 전에 CloudFormation이 할당해야 하는 시간(분)을 지정합니다. CloudFormation이 할당된 시간 내에 전체 스택을 생성하지 못할 경우, 시간 초과로 인해 스택 생성이 실패하고 스택이 롤백됩니다.

기본적으로 스택 생성에는 시간 초과가 없습니다. 하지만 개인 리소스에는 해당 리소스가 구현하는 서비스의 특성에 따라 자체 시간 초과가 설정될 수 있습니다. 예를 들어 스택의 개별 리소스가 시간 초과될 경우, 스택 생성에 대해 지정한 시간 초과 시간이 아직 지나지 않았더라도 스택 생성이 시간 초과됩니다.

해당 UI: 구성 탭/고급/**CloudFormation 제한 시간**

## notification-arns
<a name="deploy.action.cfn.notificationarns"></a>

(*DeployCloudFormationStack*/Configuration/**notification-arns**)

(선택 사항)

CodeCatalyst에서 알림 메시지를 보낼 Amazon SNS 주제의 ARN을 지정합니다. 예를 들어 `arn:aws:sns:us-east-1:111222333:MyTopic`입니다. ** CloudFormation 스택 배포** 작업이 실행되면 CodeCatalyst는 CloudFormation과 조정하여 스택 생성 또는 업데이트 프로세스 중에 발생하는 CloudFormation 이벤트당 하나의 알림을 보냅니다. (이 이벤트는 스택에 대한 CloudFormation 콘솔의 **이벤트** 탭에 표시됩니다.) 최대 다섯 개의 주제를 지정할 수 있습니다. 자세한 내용은 [Amazon SNS란 무엇인가?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 참조하세요.

해당 UI: 구성 탭/고급/**알림 ARN**

## monitor-alarm-arns
<a name="deploy.action.cfn.monitoralarmarns"></a>

(*DeployCloudFormationStack*/Configuration/**monitor-alarm-arns**)

(선택 사항)

롤백 트리거를 추가하려면 Amazon CloudWatch 경보의 Amazon 리소스 이름(ARN)을 지정합니다. 예를 들어 `arn:aws:cloudwatch::123456789012:alarm/MyAlarm`입니다. 최대 5개의 롤백 트리거를 가질 수 있습니다.

**참고**  
CloudWatch 경보 ARN을 지정하는 경우 작업이 CloudWatch에 액세스할 수 있도록 추가 권한도 구성해야 합니다. 자세한 내용은 [롤백 구성](deploy-consumption-enable-alarms.md) 섹션을 참조하세요.

해당 UI: 구성 탭/고급/**모니터 경보 ARN**

## monitor-timeout-in-minutes
<a name="deploy.action.cfn.monitortimeinminutes"></a>

(*DeployCloudFormationStack*/Configuration/**monitor-timeout-in-minutes**)

(선택 사항)

CloudFormation이 지정된 경보를 모니터링하는 데 걸리는 시간을 0\$1180분으로 지정합니다. 모니터링은 모든 스택 리소스가 배포된 *후* 시작됩니다. 지정된 모니터링 시간 내에 경보가 발생하면 배포가 실패하고 CloudFormation이 전체 스택 작업을 롤백합니다.

기본값: 0. CloudFormation은 스택 리소스가 배포되는 동안에만 경보를 모니터링하며 이후는 모니터링하지 않습니다.

해당 UI: 구성 탭/고급/**모니터링 시간**

## tags
<a name="deploy.action.cfn.tags"></a>

(*DeployCloudFormationStack*/Configuration/**tags**)

(선택 사항)

CloudFormation 스택에 연결할 태그를 지정합니다. 태그는 비용 할당과 같은 용도를 위해 스택을 식별하는 데 사용할 수 있는 임의의 키-값 페어입니다. 어떤 태그를 어떤 방식으로 사용할지에 대한 자세한 내용을 알아보려면 *Amazon EC2 사용 설명서*의 [리소스에 태그 지정](https://docs.aws.amazon.com/)을 참조하세요. CloudFormation의 태그 지정에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [CloudFormation 스택 옵션 설정을](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html) 참조하세요.

키는 영숫자 문자 또는 공백을 포함할 수 있으며 최대 127자를 포함할 수 있습니다. 값은 영숫자 문자 또는 공백을 포함할 수 있으며 최대 255자를 포함할 수 있습니다.

각 스택에 대해 최대 50개의 고유 태그를 추가할 수 있습니다.

해당 UI: 구성 탭/고급/**태그**