

새로운 *CloudFormation 템플릿 참조 안내서*입니다. 북마크와 링크를 업데이트하세요. CloudFormation을 시작하는 데 도움이 필요한 경우 [AWS CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 참조하세요.

# `AWS::LanguageExtensions` 변환
<a name="transform-aws-languageextensions"></a>

이 주제에서는 `AWS::LanguageExtensions` 변환을 사용하여 기본적으로 사용할 수 없는 기능 및 추가 함수를 활성화하는 방법을 설명합니다.

`AWS::LanguageExtensions`는 스택 템플릿에서 참조할 때 변경 세트를 사용하여 스택을 생성하거나 업데이트하는 경우 변환이 정의한 내장 함수를 템플릿 내에서 확인된 값으로 업데이트하는 CloudFormation 매크로입니다.

CloudFormation 템플릿에 이 변환을 포함하면 추가 기능(예: `Fn::ForEach`)에 액세스할 수 있으므로 반복과 같은 추가 고급 작업을 수행할 수 있습니다. `Ref` 및 `Fn::GetAtt` 함수와 같이 일반적으로 허용되지 않는 위치에서 내장 함수를 사용할 수도 있습니다.

## 사용법
<a name="aws-languageextensions-usage"></a>

`AWS::LanguageExtensions` 변환을 사용하려면 CloudFormation 템플릿의 최상위 수준에서 이를 선언해야 합니다. 다른 템플릿 섹션에 포함된 변환으로 `AWS::LanguageExtensions`을 사용할 수 없습니다.

선언에서는 리터럴 문자열 `AWS::LanguageExtensions`을 해당 값으로 사용해야 합니다. 파라미터나 함수를 사용하여 변환 값을 지정할 수 없습니다.

### 구문
<a name="aws-languageextensions-syntax"></a>

CloudFormation 템플릿에서 이 변환을 선언하려면 다음 구문을 사용합니다.

### JSON
<a name="aws-languageextensions-syntax.json"></a>

```
{
  "Transform":"AWS::LanguageExtensions",
  "Resources":{
    ...
  }
}
```

### YAML
<a name="aws-languageextensions-syntax.yaml"></a>

```
Transform: AWS::LanguageExtensions
Resources:
  ...
```

`AWS::LanguageExtensions` 변환은 추가 파라미터가 없는 독립 실행형 선언입니다.

## 추가 함수에 대한 지원
<a name="aws-languageextensions-supported-functions"></a>

`AWS::LanguageExtensions` 변환은 다음 추가 함수를 지원합니다.
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)

## 고려 사항
<a name="aws-languageextensions-considerations"></a>

`AWS::LanguageExtensions` 변환 사용 시 다음 사항을 명심하세요.
+ `AWS::LanguageExtensions` 변환을 사용하는 스택을 업데이트할 때 CloudFormation 콘솔의 **기존 템플릿 사용** 옵션 또는 이에 상응하는 명령줄 옵션 `--use-previous-template`를 사용하지 않는 것이 좋습니다. `AWS::LanguageExtensions` 변환은 처리 중에 파라미터를 리터럴 값으로 해석합니다. `--use-previous-template`를 사용하는 경우 CloudFormation은 이 처리된 템플릿을 이전 리터럴 값과 함께 사용하므로 새 파라미터 값과 Systems Manager 파라미터 업데이트가 적용되지 않습니다. 대신, 파라미터가 현재 값으로 다시 해석되도록 원래 템플릿을 제공합니다.
+ `AWS::LanguageExtensions` 변환에서만 사용 가능한 내장 함수의 템플릿 내에서는 짧은 형식의 YAML 구문이 지원되지 않습니다. 이러한 함수에 대한 명시적 참조를 사용하세요. 예를 들어 `!Length` 대신 `Fn::Length`을 사용하세요.
+ 현재 AWS SAM CLI는 `AWS::LanguageExtensions` 변환의 `Fn::ForEach` 내장 함수를 지원하지 않습니다.
+ 여러 개의 변환을 사용하는 경우 목록 형식을 사용하세요. 사용자 지정 매크로를 사용하는 경우 AWS 제공 변환을 사용자 지정 매크로 뒤에 배치하세요. `AWS::LanguageExtensions` 및 `AWS::Serverless` 변환을 모두 사용하는 경우 `AWS::LanguageExtensions` 변환이 목록에서 `AWS::Serverless` 변환 앞에 있어야 합니다.
+ `AWS::LanguageExtensions` 변환에서 제공하는 함수 및 속성은 템플릿의 `Resources`, `Conditions` 및 `Outputs` 섹션에서만 지원됩니다.

## 예제
<a name="aws-languageextensions-examples"></a>

다음 예제에서는 `AWS::LanguageExtensions` 변환을 사용하여 변환에서 정의된 `Fn::Length` 내장 함수를 사용하는 방법을 보여줍니다.

### JSON
<a name="aws-languageextensions-example.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "QueueList": {
            "Type": "CommaDelimitedList"
        },
        "QueueNameParam": {
            "Description": "Name for your SQS queue",
            "Type": "String"
        }
    },
    "Resources": {
        "Queue": {
            "Type": "AWS::SQS::Queue",
            "Properties": {
                "QueueName": {
                    "Ref": "QueueNameParam"
                },
                "DelaySeconds": {
                    "Fn::Length": {
                        "Ref": "QueueList"
                    }
                }
            }
        }
    }
}
```

### YAML
<a name="aws-languageextensions-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  QueueList:
    Type: CommaDelimitedList
  QueueNameParam:
    Description: Name for your SQS queue
    Type: String
Resources:
  Queue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: !Ref QueueNameParam
      DelaySeconds:
        'Fn::Length': !Ref QueueList
```

## 관련 리소스
<a name="aws-languageextensions-related-resources"></a>

추가 예제는 다음 주제를 참조하세요.
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md)

매크로 사용에 대한 일반적인 정보는 *AWS CloudFormation 사용 설명서*의 [템플릿 매크로를 사용하여 CloudFormation 템플릿에서 사용자 지정 처리 수행](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html)을 참조하세요.

# `Fn::FindInMap enhancements`
<a name="intrinsic-function-reference-findinmap-enhancements"></a>

`AWS::LanguageExtensions` 변환은 CloudFormation 템플릿의 `Fn::FindInMap` 내장 함수 기능을 향상시킵니다.

`Fn::FindInMap` 함수는 CloudFormation 템플릿의 `Mappings` 섹션에 정의된 매핑에서 값을 검색하는 데 사용됩니다. 그러나 표준 `Fn::FindInMap` 함수에는 누락된 매핑을 처리할 수 없거나 일부 내장 함수가 포함된 `Fn::FindInMap` 함수를 사용할 수 없는 등의 한계가 있습니다.

`AWS::LanguageExtensions` 변환은 다음과 같은 개선 사항을 도입하여 이러한 한계를 해결합니다.
+ **기본값 지원** - 매핑을 찾을 수 없는 경우 반환될 기본값을 지정할 수 있습니다.
+ **내장 함수 지원** - 표준 `Fn::FindInMap` 함수보다 더 다양한 내장 함수를 사용하여 `Fn::FindInMap`의 필드를 정의할 수도 있습니다.

## 선언
<a name="intrinsic-function-reference-findinmap-enhancements-declaration"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-enhancements-syntax.json"></a>

```
{ "Fn::FindInMap" : [
    "MapName",
    "TopLevelKey",
    "SecondLevelKey",
    {"DefaultValue": "DefaultValue"}
  ]
}
```

### YAML
<a name="intrinsic-function-reference-findinmap-enhancements-syntax.yaml"></a>

전체 함수 이름의 구문:

```
Fn::FindInMap:
  - MapName
  - TopLevelKey
  - SecondLevelKey
  - DefaultValue: DefaultValue
```

짧은 형식의 구문:

```
!FindInMap
  - MapName
  - TopLevelKey
  - SecondLevelKey
  - DefaultValue: DefaultValue
```

## 파라미터
<a name="intrinsic-function-reference-findinmap-enhancements-parameters"></a>

DefaultValue  <a name="DefaultValue"></a>
`TopLevelKey` 및/또는 `SecondLevelKey`를 `MapName` 맵에서 찾을 수 없는 경우 `Fn::FindInMap`이 확인할 값입니다. 이 필드는 선택 사항입니다.

모든 파라미터 `MapName`, `TopLevelKey`, `SecondLevelKey` 및 `DefaultValue`는 변환 중 유효한 값으로 확인할 수 있는 한 내장 함수일 수 있습니다.

## 예제
<a name="w2aac28c16c20c15"></a>

다음 예제는 `AWS::LanguageExtensions` 변환을 추가할 때 `Fn::FindInMap`의 필드를 정의하는 방법을 보여줍니다.

### 기본값 사용
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

다음은 `Fn::FindInMap` 함수에서 기본값을 사용하는 예제입니다.

#### JSON
<a name="intrinsic-function-reference-findinmap-default-value-example.json"></a>

```
{
  //...
    "Transform": "AWS::LanguageExtensions",
    //...
    "Fn::FindInMap": [
      "RegionMap",
      { "Ref": "AWS::Region" },
      "InstanceType",
      { "DefaultValue": "t3.micro" }
    ]
  //...
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-default-value-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
    !FindInMap 
        - 'RegionMap'
        - !Ref 'AWS::Region'
        - 'InstanceType'
        - DefaultValue: t3.micro
#...
```

#### 내장 함수를 사용하여 최상위 키 정의
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

다음은 `Fn::Select` 및 `Fn::Split` 내장 함수가 포함된 `Fn::FindInMap` 함수를 사용하여 최상위 키를 정의하는 예제입니다.

##### JSON
<a name="intrinsic-function-reference-findinmap-enhancement-example.json"></a>

```
{
  //...
  "Transform": "AWS::LanguageExtensions",
  //...
      "Fn::FindInMap": [
        "MyMap",
        {
          "Fn::Select": [
            0,
            {
              "Fn::Split": [
                "|",
                { "Ref": "InputKeys" }
              ]
            }
          ]
        },
        "SecondKey"
      ]
//...
}
```

##### YAML
<a name="intrinsic-function-reference-findinmap-enhance-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
    !FindInMap: [MyMap, !Select [0, !Split [|, !Ref InputKeys]], SecondKey]
#...
```

## 지원되는 함수
<a name="intrinsic-function-reference-findinmap-enhancements-supported-functions"></a>

`Fn::FindInMap:` 향상 기능의 파라미터에 다음 함수를 사용할 수 있습니다.
+ ``Fn::FindInMap``
+ ``Fn::Join``
+ ``Fn::Sub``
+ ``Fn::If``
+ ``Fn::Select``
+ ``Fn::Length``
+ ``Fn::ToJsonString``
+ ``Fn::Split`` - 기본값으로 사용되지 않는 한 `Fn::Split`은 ``Fn::Join`` 또는 ``Fn::Select``와 같이 문자열을 생성하는 내장 함수와 함께 사용해야 합니다.
+ ``Ref``

## 관련 리소스
<a name="w2aac28c16c20c19"></a>

`Fn::FindInMap` 내장 함수 사용 방법에 대한 자세한 내용과 예제는 [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md) 단원을 참조하세요.

`AWS::LanguageExtensions` 변환에 대한 자세한 내용은 [`AWS::LanguageExtensions` 변환](transform-aws-languageextensions.md) 섹션을 참조하세요.