

# CloudFormation 템플릿 형식
<a name="template-formats"></a>

JSON 또는 YAML 형식으로 CloudFormation 템플릿을 작성할 수 있습니다. 두 형식 모두 용도는 같지만 가독성과 복잡성 측면에서 분명한 이점을 제공합니다.
+ **JSON** - JSON은 시스템이 쉽게 구문 분석하고 생성할 수 있는 가벼운 데이터 교환 형식입니다. 하지만 특히 복잡한 구성의 경우 사람이 읽고 쓰는 데 번거로울 수 있습니다. JSON에서 템플릿은 중첩된 중괄호 `{}`와 대괄호 `[]`를 사용하여 리소스, 파라미터 및 기타 구성 요소를 정의하는 구조입니다. 구문에서 모든 요소를 명시적으로 선언해야 하므로 템플릿이 장황해질 수 있지만 구조화된 형식을 엄격하게 준수할 수 있습니다.
+ **YAML** - YAML은 JSON보다 사람이 읽기 쉬우면서 장황하지 않도록 설계되었습니다. 중첩을 나타내는 데 중괄호와 대괄호 대신 들여쓰기를 사용하므로 리소스 및 파라미터의 계층 구조를 보다 쉽게 시각화할 수 있습니다. YAML은 명확성과 사용 편의성 때문에 선호되는 경우가 많으며, 특히 복잡한 템플릿을 다룰 때 선호됩니다. 하지만 YAML이 들여쓰기에 의존하기에 띄어쓰기가 일정하지 않을 경우 오류가 발생할 수 있으므로 정확성을 유지하기 위해 세심한 주의를 기울여야 합니다.

## 템플릿 구조
<a name="template-structure"></a>

CloudFormation 템플릿은 여러 섹션으로 나뉘며 각 섹션은 특정 유형의 정보를 유지하도록 설계되어 있습니다. 일부 섹션은 특정 순서로 선언해야 하지만 나머지 섹션은 순서가 중요하지 않습니다. 하지만 템플릿을 작성할 때 한 섹션의 값이 이전 섹션의 값을 참조할 수도 있으므로 다음 예제의 논리적 순서를 사용하는 것이 유용할 수 있습니다.

템플릿을 작성할 때 `Resources` 섹션과 같이 중복된 주요 섹션을 사용해서는 안 됩니다. CloudFormation은 이러한 템플릿을 수락할 수 있지만 템플릿을 처리할 때 정의되지 않은 동작을 하고 리소스를 잘못 프로비저닝하거나 설명할 수 없는 오류를 반환할 수 있습니다.

### JSON
<a name="template-structure.json"></a>

다음 예제에서는 사용 가능한 모든 섹션이 있는 JSON 형식의 템플릿 구조를 보여줍니다.

```
{
  "AWSTemplateFormatVersion" : "{{version date}}",

  "Description" : "{{JSON string}}",

  "Metadata" : {
    {{template metadata}}
  },

  "Parameters" : {
    {{set of parameters}}
  },
  
  "Rules" : {
    {{set of rules}}
  },

  "Mappings" : {
    {{set of mappings}}
  },

  "Conditions" : {
    {{set of conditions}}
  },

  "Transform" : {
    {{set of transforms}}
  },

  "Resources" : {
    {{set of resources}}
  },
  
  "Outputs" : {
    {{set of outputs}}
  }
}
```

### YAML
<a name="template-structure.yaml"></a>

다음 예제에서는 사용 가능한 모든 섹션이 있는 YAML 형식의 템플릿 구조를 보여줍니다.

```
---
AWSTemplateFormatVersion: {{version date}}

Description:
  {{String}}

Metadata:
  {{template metadata}}

Parameters:
  {{set of parameters}}

Rules:
  {{set of rules}}

Mappings:
  {{set of mappings}}

Conditions:
  {{set of conditions}}

Transform:
  {{set of transforms}}

Resources:
  {{set of resources}}

Outputs:
  {{set of outputs}}
```

## 설명
<a name="template-comments"></a>

JSON 형식의 템플릿에서는 주석이 지원되지 않습니다. JSON은 설계상 주석 구문을 포함하지 않으므로 JSON 구조 내에서 직접 주석을 추가할 수 없습니다. 하지만 설명 노트나 문서를 포함해야 하는 경우 메타데이터 추가를 고려할 수 있습니다. 자세한 내용은 [Metadata 속성](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html)을 참조하세요.

YAML 형식의 템플릿에서는 `#` 기호를 사용하여 인라인 주석을 포함할 수 있습니다.

다음 예제에서는 인라인 설명이 있는 YAML 템플릿을 보여 줍니다.

```
AWSTemplateFormatVersion: 2010-09-09
Description: A sample CloudFormation template with YAML comments.
# Resources section
Resources:
  MyEC2Instance: 
    Type: AWS::EC2::Instance
    Properties: 
      # Linux AMI
      ImageId: ami-1234567890abcdef0 
      InstanceType: t2.micro
      KeyName: MyKey
      BlockDeviceMappings:
        - DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20
```

## 사양
<a name="template-formats.supported-specifications"></a>

CloudFormation은 다음과 같은 JSON 및 YAML 사양을 지원합니다.

JSON  
CloudFormation은 ECMA-404 JSON 표준을 따릅니다. JSON 형식에 대한 자세한 내용은 [http://www.json.org](http://www.json.org)를 참조하십시오.

YAML  
CloudFormation은 몇 가지 예외가 있지만 YAML 버전 1.1 사양을 지원합니다. CloudFormation은 다음과 같은 기능을 지원하지 않습니다.  
+ `binary`, `omap`, `pairs`, `set` 및 `timestamp` 태그
+ 에일리어스
+ 해시 병합
YAML에 대한 자세한 내용은 [http://yaml.org/](https://yaml.org/)를 참조하세요.

## 자세히 알아보기
<a name="template-formats.learnmore"></a>

템플릿에서 지정하는 각 리소스에 대해 JSON 또는 YAML의 특정 구문 규칙을 사용하여 해당 속성과 값을 정의합니다. 각 형식의 템플릿 구문에 대한 자세한 내용은 [CloudFormation 템플릿 섹션](template-anatomy.md) 단원을 참조하십시오.