

# 일반 템플릿 코드 조각
<a name="quickref-general"></a>

다음은 AWS 서비스에 특정하지 않은 여러 CloudFormation 템플릿의 특징을 보여주는 예제입니다.

**Topics**
+ [

## Base64로 인코딩된 UserData 속성
](#scenario-userdata-base64)
+ [

## AccessKey 및 SecretKey가 있는 Base64로 인코딩된 UserData 속성
](#scenario-userdata-base64-with-keys)
+ [

## 리터럴 문자열 파라미터가 하나 있는 Parameters 섹션
](#scenario-one-string-parameter)
+ [

## 정규식 제약 조건이 포함된 문자열 파라미터가 있는 Parameters 섹션
](#scenario-constraint-string-parameter)
+ [

## MinValue 및 MaxValue 제약 조건이 포함된 숫자 파라미터가 있는 Parameters 섹션
](#scenario-one-number-min-parameter)
+ [

## AllowedValues 제약 조건이 포함된 숫자 파라미터가 있는 Parameters 섹션
](#scenario-one-number-parameter)
+ [

## 리터럴 CommaDelimitedList 파라미터가 하나 있는 Parameters 섹션
](#scenario-one-list-parameter)
+ [

## 가상 파라미터를 기반으로 한 파라미터 값이 있는 Parameters 섹션
](#scenario-one-pseudo-parameter)
+ [

## 매핑이 3개 있는 Mapping 섹션
](#scenario-mapping-with-four-maps)
+ [

## 리터럴 문자열 기반 Description
](#scenario-description-from-literal-string)
+ [

## 리터럴 문자열 출력이 하나 있는 Outputs 섹션
](#scenario-output-with-literal-string)
+ [

## 리소스 참조 및 가상 참조 출력이 각각 하나씩 있는 Outputs 섹션
](#scenario-output-with-ref-and-pseudo-ref)
+ [

## 함수, 리터럴 문자열, 참조 및 가상 파라미터를 기반으로 한 출력이 있는 Outputs 섹션
](#scenario-output-with-complex-spec)
+ [

## 템플릿 포맷 버전
](#scenario-format-version)
+ [

## AWS Tags 속성
](#scenario-format-aws-tag)

## Base64로 인코딩된 UserData 속성
<a name="scenario-userdata-base64"></a>

이 예제는 `Fn::Base64` 및 `Fn::Join` 함수를 사용하여 `UserData` 속성의 조합을 보여줍니다. 참조 `MyValue` 및 `MyName`은 템플릿의 `Parameters` 섹션에 정의되어야 하는 파라미터입니다. 리터럴 문자열 `Hello World`는 이 예제에서 `UserData`의 일부로 전달하는 또 다른 값입니다.

### JSON
<a name="quickref-general-example-1.json"></a>

```
1. "UserData" : {
2.     "Fn::Base64" : {
3.         "Fn::Join" : [ ",", [
4.             { "Ref" : "MyValue" },
5.             { "Ref" : "MyName" },
6.             "Hello World" ] ]
7.     }
8. }
```

### YAML
<a name="quickref-general-example-1.yaml"></a>

```
1. UserData:
2.   Fn::Base64: !Sub |
3.      Ref: MyValue
4.      Ref: MyName
5.      Hello World
```

## AccessKey 및 SecretKey가 있는 Base64로 인코딩된 UserData 속성
<a name="scenario-userdata-base64-with-keys"></a>

이 예제는 `Fn::Base64` 및 `Fn::Join` 함수를 사용하여 `UserData` 속성의 조합을 보여줍니다. 여기에는 `AccessKey` 및 `SecretKey` 정보가 포함됩니다. 참조 `AccessKey` 및 `SecretKey`는 템플릿의 파라미터 섹션에 정의되어야 하는 파라미터입니다.

### JSON
<a name="quickref-general-example-2.json"></a>

```
1. "UserData" : {
2.     "Fn::Base64" : {
3.         "Fn::Join" : [ "", [
4.             "ACCESS_KEY=", { "Ref" : "AccessKey" },
5.             "SECRET_KEY=", { "Ref" : "SecretKey" } ]
6.         ]
7.     }
8. }
```

### YAML
<a name="quickref-general-example-2.yaml"></a>

```
1. UserData:
2.   Fn::Base64: !Sub |
3.      ACCESS_KEY=${AccessKey}
4.      SECRET_KEY=${SecretKey}
```

## 리터럴 문자열 파라미터가 하나 있는 Parameters 섹션
<a name="scenario-one-string-parameter"></a>

다음 예제에서는 `String` 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다.

### JSON
<a name="quickref-general-example-3.json"></a>

```
1. "Parameters" : {
2.     "UserName" : {
3.         "Type" : "String",
4.         "Default" : "nonadmin",
5.         "Description" : "Assume a vanilla user if no command-line spec provided"
6.     }
7. }
```

### YAML
<a name="quickref-general-example-3.yaml"></a>

```
1. Parameters:
2.   UserName:
3.     Type: String
4.     Default: nonadmin
5.     Description: Assume a vanilla user if no command-line spec provided
```

## 정규식 제약 조건이 포함된 문자열 파라미터가 있는 Parameters 섹션
<a name="scenario-constraint-string-parameter"></a>

다음 예제에서는 `String` 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. `AdminUserAccount` 파라미터의 기본값은 `admin`입니다. 이 파라미터 값은 최소 길이가 1자, 최대 길이가 16자여야 하며 영문자 및 숫자를 포함해야 하지만 영문자로 시작해야 합니다.

### JSON
<a name="quickref-general-example-4.json"></a>

```
 1. "Parameters" : {
 2.     "AdminUserAccount": {
 3.       "Default": "admin",
 4.       "NoEcho": "true",
 5.       "Description" : "The admin account user name",
 6.       "Type": "String",
 7.       "MinLength": "1",
 8.       "MaxLength": "16",
 9.       "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*"
10.     }
11. }
```

### YAML
<a name="quickref-general-example-4.yaml"></a>

```
1. Parameters:
2.   AdminUserAccount:
3.     Default: admin
4.     NoEcho: true
5.     Description: The admin account user name
6.     Type: String
7.     MinLength: 1
8.     MaxLength: 16
9.     AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
```

## MinValue 및 MaxValue 제약 조건이 포함된 숫자 파라미터가 있는 Parameters 섹션
<a name="scenario-one-number-min-parameter"></a>

다음 예제에서는 `Number` 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. `WebServerPort` 파라미터는 기본값이 80이고, 최솟값은 1, 최댓값은 65,535입니다.

### JSON
<a name="quickref-general-example-5.json"></a>

```
1. "Parameters" : {
2.     "WebServerPort": {
3.       "Default": "80",
4.       "Description" : "TCP/IP port for the web server",
5.       "Type": "Number",
6.       "MinValue": "1",
7.       "MaxValue": "65535"
8.     }
9. }
```

### YAML
<a name="quickref-general-example-5.yaml"></a>

```
1. Parameters:
2.   WebServerPort:
3.     Default: 80
4.     Description: TCP/IP port for the web server
5.     Type: Number
6.     MinValue: 1
7.     MaxValue: 65535
```

## AllowedValues 제약 조건이 포함된 숫자 파라미터가 있는 Parameters 섹션
<a name="scenario-one-number-parameter"></a>

다음 예제에서는 `Number` 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. `WebServerPort` 파라미터는 기본값이 80이고, 80\$18,888의 값만 허용합니다.

### JSON
<a name="quickref-general-example-6.json"></a>

```
1. "Parameters" : {
2.     "WebServerPortLimited": {
3.       "Default": "80",
4.       "Description" : "TCP/IP port for the web server",
5.       "Type": "Number",
6.       "AllowedValues" : ["80", "8888"]
7.     }
8. }
```

### YAML
<a name="quickref-general-example-6.yaml"></a>

```
1. Parameters:
2.   WebServerPortLimited:
3.     Default: 80
4.     Description: TCP/IP port for the web server
5.     Type: Number
6.     AllowedValues:
7.     - 80
8.     - 8888
```

## 리터럴 CommaDelimitedList 파라미터가 하나 있는 Parameters 섹션
<a name="scenario-one-list-parameter"></a>

다음 예제는 단일 `CommaDelimitedList` 유형 파라미터가 선언된 유효한 `Parameters` 섹션 선언을 보여줍니다. `NoEcho` 속성은 `TRUE`로 설정되어 있으며, 아래 지정된 위치에 저장된 정보를 제외하고 **describe-stacks** 출력에서 값이 별표(\$1\$1\$1\$1\$1)로 마스킹 처리됩니다.

**중요**  
`NoEcho` 속성을 사용해도 다음에 저장된 정보는 마스킹되지 않습니다.  
`Metadata` 템플릿 섹션. CloudFormation은 `Metadata` 섹션에 포함된 정보를 변환, 수정 또는 삭제하지 않습니다. 자세한 내용은 [메타데이터](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html)를 참조하십시오.
`Outputs` 템플릿 섹션. 자세한 내용은 [출력](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html)을 참조하십시오.
리소스 정의의 `Metadata` 속성입니다. 자세한 내용은 [`Metadata` 속성](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html)을 참조하세요.
이러한 메커니즘을 사용하여 암호나 보안 정보와 같은 중요한 정보를 포함하지 않는 것이 좋습니다.

**중요**  
AWS Systems Manager Parameter Store 또는 AWS Secrets Manager와 같이 CloudFormation 외부에서 저장 및 관리되는 중요한 정보를 참조하려면 CloudFormation 템플릿에 직접 중요한 정보를 포함하는 대신 스택 템플릿에 있는 동적 파라미터를 사용하는 것이 좋습니다.  
자세한 내용은 [템플릿에 자격 증명을 포함하지 않음](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/security-best-practices.html#creds)을 참조하십시오.

### JSON
<a name="quickref-general-example-7.json"></a>

```
1. "Parameters" : {
2.     "UserRoles" : {
3.         "Type" : "CommaDelimitedList",
4.         "Default" : "guest,newhire",
5.         "NoEcho" : "TRUE"
6.     }
7. }
```

### YAML
<a name="quickref-general-example-7.yaml"></a>

```
1. Parameters:
2.   UserRoles:
3.     Type: CommaDelimitedList
4.     Default: "guest,newhire"
5.     NoEcho: true
```

## 가상 파라미터를 기반으로 한 파라미터 값이 있는 Parameters 섹션
<a name="scenario-one-pseudo-parameter"></a>

다음 예제에서는 가상 파라미터 `AWS::StackName` 및 `AWS::Region`을 사용하는 EC2 사용자 데이터의 명령을 보여줍니다. 가상 parameters에 대한 자세한 내용은 [가상 파라미터를 사용하여 AWS 값 가져오기](pseudo-parameter-reference.md) 단원을 참조하십시오.

### JSON
<a name="quickref-general-example-10.json"></a>

```
 1.           "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
 2.              "#!/bin/bash -xe\n",
 3.              "yum install -y aws-cfn-bootstrap\n",
 4. 
 5.              "/opt/aws/bin/cfn-init -v ",
 6.              "         --stack ", { "Ref" : "AWS::StackName" },
 7.              "         --resource LaunchConfig ",
 8.              "         --region ", { "Ref" : "AWS::Region" }, "\n",
 9. 
10.              "/opt/aws/bin/cfn-signal -e $? ",
11.              "         --stack ", { "Ref" : "AWS::StackName" },
12.              "         --resource WebServerGroup ",
13.              "         --region ", { "Ref" : "AWS::Region" }, "\n"
14.         ]]}}
15.       }
```

### YAML
<a name="quickref-general-example-10.yaml"></a>

```
1. UserData:
2.   Fn::Base64: !Sub |
3.      #!/bin/bash -xe
4.      yum update -y aws-cfn-bootstrap
5.      /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --region ${AWS::Region}
6.      /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
```

## 매핑이 3개 있는 Mapping 섹션
<a name="scenario-mapping-with-four-maps"></a>

다음 예제는 매핑이 3개 있는 유효한 `Mapping` 섹션 선언을 보여줍니다. `Stop`, `SlowDown` 또는 `Go`의 매핑 키와 일치하는 경우 맵은 해당하는 `RGBColor` 속성에 할당된 RGB 값을 제공합니다.

### JSON
<a name="quickref-general-example-11.json"></a>

```
 1. "Mappings" : {
 2.     "LightColor" : {
 3.         "Stop" : {
 4.             "Description" : "red",
 5.             "RGBColor" : "RED 255 GREEN 0 BLUE 0"
 6.         },
 7.         "SlowDown" : {
 8.             "Description" : "yellow",
 9.             "RGBColor" : "RED 255 GREEN 255 BLUE 0"
10.         },
11.         "Go" : {
12.             "Description" : "green",
13.             "RGBColor" : "RED 0 GREEN 128 BLUE 0"
14.         }
15.     }
16. }
```

### YAML
<a name="quickref-general-example-11.yaml"></a>

```
 1. Mappings:
 2.   LightColor:
 3.     Stop:
 4.       Description: red
 5.       RGBColor: "RED 255 GREEN 0 BLUE 0"
 6.     SlowDown:
 7.       Description: yellow
 8.       RGBColor: "RED 255 GREEN 255 BLUE 0"
 9.     Go:
10.       Description: green
11.       RGBColor: "RED 0 GREEN 128 BLUE 0"
```

## 리터럴 문자열 기반 Description
<a name="scenario-description-from-literal-string"></a>

다음 예제는 값이 리터럴 문자열을 기반으로 하는 유효한 `Description` 섹션 선언을 보여줍니다. 이 코드 조각은 템플릿, 파라미터, 리소스, 속성 또는 출력에 대한 코드 조각일 수 있습니다.

### JSON
<a name="quickref-general-example-8.json"></a>

```
1. "Description" : "Replace this value"
```

### YAML
<a name="quickref-general-example-8.yaml"></a>

```
1. Description: "Replace this value"
```

## 리터럴 문자열 출력이 하나 있는 Outputs 섹션
<a name="scenario-output-with-literal-string"></a>

이 예제에서는 리터럴 문자열을 기반으로 한 출력 할당을 보여줍니다.

### JSON
<a name="quickref-general-example-12.json"></a>

```
1. "Outputs" : {
2.     "MyPhone" : {
3.         "Value" : "Please call 555-5555",
4.         "Description" : "A random message for aws cloudformation describe-stacks"
5.     }
6. }
```

### YAML
<a name="quickref-general-example-12.yaml"></a>

```
1. Outputs:
2.   MyPhone:
3.     Value: Please call 555-5555
4.     Description: A random message for aws cloudformation describe-stacks
```

## 리소스 참조 및 가상 참조 출력이 각각 하나씩 있는 Outputs 섹션
<a name="scenario-output-with-ref-and-pseudo-ref"></a>

이 예제는 출력 할당이 2개 있는 `Outputs` 섹션이 표시됩니다. 출력 할당 하나는 리소스를 기반으로 하고, 다른 하나는 가상 참조를 기반으로 합니다.

### JSON
<a name="quickref-general-example-13.json"></a>

```
1. "Outputs" : {
2.    "SNSTopic" : { "Value" : { "Ref" : "MyNotificationTopic" } },
3.    "StackName" : { "Value" : { "Ref" : "AWS::StackName" } }
4. }
```

### YAML
<a name="quickref-general-example-13.yaml"></a>

```
1. Outputs:
2.   SNSTopic:
3.     Value: !Ref MyNotificationTopic
4.   StackName:
5.     Value: !Ref AWS::StackName
```

## 함수, 리터럴 문자열, 참조 및 가상 파라미터를 기반으로 한 출력이 있는 Outputs 섹션
<a name="scenario-output-with-complex-spec"></a>

이 예제에서는 출력 할당이 한 개 있는 출력 섹션이 표시됩니다. 퍼센트 기호를 구분 기호로 사용하여 값을 연결하기 위해 Join 함수가 사용됩니다.

### JSON
<a name="quickref-general-example-14.json"></a>

```
1. "Outputs" : {
2.     "MyOutput" : {
3.         "Value" : { "Fn::Join" :
4.             [ "%", [ "A-string", {"Ref" : "AWS::StackName" } ] ]
5.         }
6.     }
7. }
```

### YAML
<a name="quickref-general-example-14.yaml"></a>

```
1. Outputs:
2.   MyOutput:
3.     Value: !Join [ %, [ 'A-string', !Ref 'AWS::StackName' ]]
```

## 템플릿 포맷 버전
<a name="scenario-format-version"></a>

다음 코드 조각은 유효한 `AWSTemplateFormatVersion` 섹션 선언을 보여줍니다.

### JSON
<a name="quickref-general-example-9.json"></a>

```
1. "AWSTemplateFormatVersion" : "2010-09-09"
```

### YAML
<a name="quickref-general-example-9.yaml"></a>

```
1. AWSTemplateFormatVersion: '2010-09-09'
```

## AWS Tags 속성
<a name="scenario-format-aws-tag"></a>

이 예제는 AWS `Tags` 속성을 보여줍니다. 이 속성은 리소스의 속성 섹션 내에서 지정합니다. 리소스가 생성되면 선언한 태그로 리소스에 태그가 지정됩니다.

### JSON
<a name="quickref-general-example-15.json"></a>

```
 1. "Tags" : [
 2.       {
 3.         "Key" : "keyname1",
 4.         "Value" : "value1"
 5.       },
 6.       {
 7.         "Key" : "keyname2",
 8.         "Value" : "value2"
 9.       }
10.     ]
```

### YAML
<a name="quickref-general-example-15.yaml"></a>

```
1. Tags: 
2.   - 
3.     Key: "keyname1"
4.     Value: "value1"
5.   - 
6.     Key: "keyname2"
7.     Value: "value2"
```