

# CloudFormation 템플릿 작업
<a name="template-guide"></a>

AWS CloudFormation 템플릿은 스택의 일부로 생성, 업데이트 또는 삭제하려는 AWS 리소스를 정의합니다. 템플릿에는 여러 섹션이 있지만 [Resources](resources-section-structure.md) 섹션은 하나 이상의 리소스를 선언해야 하는 유일한 필수 섹션입니다.

다음 방법을 사용하여 템플릿을 생성할 수 있습니다.
+ **AWS Infrastructure Composer** - 템플릿 디자인을 위한 시각적 인터페이스입니다.
+ **텍스트 편집기** - JSON 또는 YAML 구문으로 직접 템플릿을 작성합니다.
+ **IaC 생성기** - 계정에 프로비저닝된 리소스 중 현재 CloudFormation에서 관리하지 않는 리소스에서 템플릿을 생성합니다. IaC 생성기는 사용자 리전의 Cloud Control API에서 지원하는 다양한 리소스 유형과 함께 작동합니다.

이 섹션에서는 CloudFormation 템플릿의 다양한 섹션을 사용하는 방법과 스택 템플릿 생성을 시작하는 방법에 대한 포괄적인 가이드를 제공합니다. 다음과 같은 주제를 다룹니다.

**Topics**
+ [템플릿이 저장되는 위치](#where-they-get-stored)
+ [템플릿 유효성 검사](#template-validation)
+ [템플릿 시작하기](#getting-started)
+ [샘플 템플릿](#sample-templates)
+ [템플릿 형식](template-formats.md)
+ [템플릿 섹션](template-anatomy.md)
+ [Infrastructure Composer](infrastructure-composer-for-cloudformation.md)
+ [AWS CloudFormation 언어 서버](ide-extension.md)
+ [IaC 생성기](generate-IaC.md)
+ [다른 서비스에 저장된 값 가져오기](dynamic-references.md)
+ [AWS 값 가져오기](pseudo-parameter-reference.md)
+ [스택 출력 가져오기](using-cfn-stack-exports.md)
+ [런타임 시 기존 리소스 지정](cloudformation-supplied-parameter-types.md)
+ [연습](walkthroughs.md)
+ [템플릿 코드 조각](template-snippets.md)
+ [Windows 기반 스택](cfn-windows-stacks.md)
+ [CloudFormation 제공 리소스 유형 사용](cloudformation-supplied-resource-types.md)
+ [모듈을 사용하여 재사용 가능한 리소스 구성 생성](modules.md)

## 템플릿이 저장되는 위치
<a name="where-they-get-stored"></a>

**Amazon S3 버킷**  
CloudFormation 템플릿을 Amazon S3 버킷에 저장할 수 있습니다. 스택을 생성하거나 업데이트할 때 직접 업로드하는 대신 템플릿의 S3 URL을 지정할 수 있습니다.

AWS Management Console 또는 AWS CLI를 통해 템플릿을 직접 업로드하는 경우 S3 버킷이 자동으로 생성됩니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](cfn-console-create-stack.md) 섹션을 참조하세요.

**Git 리포지토리**  
[Git 동기화](git-sync.md)를 사용하면 Git 리포지토리에 템플릿을 저장할 수 있습니다. 스택을 생성하거나 업데이트할 때 직접 업로드하거나 S3 URL을 참조하는 대신 템플릿이 포함된 Git 리포지토리 위치와 브랜치를 지정할 수 있습니다. CloudFormation은 지정된 리포지토리와 브랜치를 자동으로 모니터링하여 템플릿 변경을 확인합니다. 자세한 내용은 [Git 동기화를 사용하여 리포지토리 소스 코드에서 스택 생성](git-sync-create-stack-from-repository-source-code.md) 섹션을 참조하세요.

## 템플릿 유효성 검사
<a name="template-validation"></a>

**구문 유효성 검사**  
[validate-template](service_code_examples.md#validate-template-sdk) CLI 명령을 사용하거나 콘솔에서 템플릿을 지정하여 템플릿의 JSON 또는 YAML 구문을 확인할 수 있습니다. 콘솔은 유효성 검사를 자동으로 수행합니다. 자세한 내용은 [CloudFormation 콘솔에서 스택 생성](cfn-console-create-stack.md) 섹션을 참조하세요.

하지만 이러한 방법은 템플릿의 구문만 확인하고 리소스에 지정한 속성 값은 확인하지 않습니다.

**추가 유효성 검사 도구**  
더 복잡한 유효성 검사 및 모범 사례 검사의 경우 다음과 같은 추가 도구를 사용할 수 있습니다.
+ [CloudFormation Linter(cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) - [CloudFormation 리소스 공급자 스키마](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/resource-type-schemas.html)를 기준으로 템플릿 유효성을 검사합니다. 리소스 속성의 유효한 값과 모범 사례를 검사하는 것이 포함됩니다.
+ [CloudFormation Rain(rain fmt)](https://github.com/aws-cloudformation/rain) - CloudFormation 템플릿을 일관된 표준으로 형식을 지정하거나 템플릿을 JSON에서 YAML로(또는 YAML에서 JSON으로) 형식을 재지정합니다. YAML을 사용할 때 주석을 보존하고 가능한 경우 내장 함수 사용을 짧은 구문으로 전환합니다.

## 템플릿 시작하기
<a name="getting-started"></a>

CloudFormation 템플릿 생성을 시작하려면 다음 단계를 따릅니다.

1. **리소스 선택** - EC2 인스턴스, VPC, 보안 그룹 등과 같이 스택에 포함하려는 AWS 리소스를 식별합니다.

1. **템플릿 작성** - 리소스와 속성을 정의하여 JSON 또는 YAML 형식으로 템플릿을 작성합니다.

1. **템플릿 저장** - `.json`, `.yaml`, `.txt` 등의 파일 확장자를 사용하여 템플릿을 로컬에 저장합니다.

1. **템플릿 유효성 검사** - [템플릿 유효성 검사](#template-validation) 섹션에서 설명하는 방법을 사용하여 템플릿의 유효성을 검사합니다.

1. **스택 생성** - 유효성 검사가 완료된 템플릿을 사용하여 스택을 생성합니다.

### CloudFormation 템플릿 참조 사용 계획
<a name="additional-resources"></a>

템플릿을 작성할 때 [AWS 리소스 및 속성 유형 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)에서 다양한 리소스 유형에 대한 자세한 구문에 대한 설명서를 찾을 수 있습니다.

스택 템플릿에는 런타임까지 사용할 수 없는 속성 값을 할당하는 내재 함수와 리소스의 동작을 제어하는 특수 속성이 필요한 경우가 많습니다. 템플릿을 작성할 때 다음 리소스를 참조하여 지침을 확인하세요.
+ [내장 함수 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference.html) - 일반적으로 사용되는 일부 내장 함수는 다음과 같습니다.
  + `Ref` - 리소스의 파라미터 또는 물리적 ID 값을 가져옵니다.
  + `Sub` - 문자열의 자리 표시자를 실제 값으로 대체합니다.
  + `GetAtt` - 템플릿의 리소스에서 속성 값을 반환합니다.
  + `Join` - 값 세트를 단일 문자열로 결합합니다.
+ [리소스 속성 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-product-attribute-reference.html) - 일반적으로 사용되는 일부 특수 속성은 다음과 같습니다.
  + `DependsOn` - 이 속성을 사용하면 한 리소스 다음에 다른 리소스 하나를 생성하도록 지정할 수 있습니다.
  + `DeletionPolicy` - 이 속성을 사용하면 CloudFormation에서 리소스 삭제를 처리하는 방법을 지정할 수 있습니다.

## 샘플 템플릿
<a name="sample-templates"></a>

CloudFormation은 시작하는 데 사용할 수 있는 오픈 소스 스택 템플릿을 제공합니다. 자세한 내용은 GitHub 웹 사이트의 [CloudFormation Sample Templates](https://github.com/aws-cloudformation/aws-cloudformation-templates)를 참조하세요.

이러한 템플릿은 프로덕션에 바로 사용할 수 있는 것이 아니라는 점에 유의하세요. 시간을 내어 이러한 프레임워크의 작동 방식을 알아보고, 필요에 맞게 조정하고, 회사의 규정 준수 기준을 충족하는지 확인해야 합니다.

이 리포지토리의 각 템플릿은 [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-lint)(cfn-lint) 검사를 통과했으며, Center for Internet Security (CIS) Top 20를 기반으로 하는 기본 AWS CloudFormation Guard 규칙 세트(샘플을 단일 사용 사례에 집중하는 것이 합당한 일부 규칙 제외)도 통과했습니다.