

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

# 변환 참조
<a name="transform-reference"></a>

변환은 CloudFormation에서 호스팅하는 매크로입니다. 사용자 지정 매크로와는 달리 변환은 특별한 권한을 필요로 하지 않는데, CloudFormation에서 호스팅되기 때문입니다. 변환은 CloudFormation 내에 있는 모든 계정의 템플릿에서 사용할 수 있습니다. 또한 변환을 사용할 때 발생하는 비용은 없습니다. CloudFormation에서는 변환을 평가 순서 및 범위 측면에서 다른 매크로와 동일하게 처리합니다.

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

CloudFormation 템플릿에서 다음 변환을 사용할 수 있습니다.

**Topics**
+ [`AWS::CodeDeployBlueGreen` 변환](transform-aws-codedeploybluegreen.md)
+ [`AWS::Include` 변환](transform-aws-include.md)
+ [`AWS::LanguageExtensions` 변환](transform-aws-languageextensions.md)
+ [`AWS::SecretsManager` 변환](transform-aws-secretsmanager.md)
+ [`AWS::Serverless` 변환](transform-aws-serverless.md)
+ [`AWS::ServiceCatalog` 변환](transform-aws-servicecatalog.md)

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

이 주제에서는 `AWS::CodeDeployBlueGreen` 변환을 사용하여 스택에서 CodeDeploy를 통해 ECS 블루/그린 배포를 활성화하는 방법을 알아봅니다.

자세한 내용은 *AWS CloudFormation 사용 설명서*의 [CloudFormation을 사용하여 CodeDeploy를 통한 ECS 블루/그린 배포 수행](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)을 참조하세요.

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

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

변환 선언 값은 리터럴 문자열이어야 합니다 파라미터나 함수를 사용하여 변환 값을 지정할 수 없습니다.

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

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

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

```
{
  "Transform":[
    "AWS::CodeDeployBlueGreen"
  ],
  "Resources":{
    ...
  }
}
```

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

```
Transform:
  - 'AWS::CodeDeployBlueGreen'
Resources:
  ...
```

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

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

스택에서 ECS 블루/그린 배포를 활성화하는 데 사용할 수 있는 전체 CloudFormation 템플릿 예제는 *AWS CloudFormation 사용 설명서*의 [블루/그린 배포 템플릿 예제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green-template-example.html)를 참조하세요.

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

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

이 주제에서는 `AWS::Include` 변환을 사용하여 CloudFormation 템플릿에 보일러플레이트 콘텐츠를 삽입하는 방법을 설명합니다.

`AWS::Include`는 스택 템플릿에서 참조할 때 변경 세트를 사용하여 스택을 생성하거나 업데이트하는 경우 템플릿에서 변환의 위치에 지정된 파일의 콘텐츠를 삽입하는 CloudFormation 매크로입니다. `AWS::Include` 함수는 프로그래밍 언어로 `include`, `copy` 또는 `import` 지시문과 비슷하게 동작합니다.

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

템플릿 파라미터 섹션 또는 템플릿 버전을 제외하고 CloudFormation 템플릿 내 어디서든지 `AWS::Include` 변환을 사용할 수 있습니다. 예를 들어 매핑 섹션에서 `AWS::Include`를 사용할 수 있습니다.

### 템플릿 최상위의 구문
<a name="aws-include-syntax-top-level"></a>

CloudFormation 템플릿의 최상위 수준에서 이 템플릿을 `Transform` 섹션으로 선언하려면 다음 구문을 사용합니다.

#### JSON
<a name="aws-include-syntax-top-level.json"></a>

```
{
  "Transform":{
    "Name":"AWS::Include",
    "Parameters":{
      "Location":"s3://amzn-s3-demo-bucket/MyFileName.json"
    }
  },
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-include-syntax-top-level.yaml"></a>

```
Transform:
  Name: AWS::Include
  Parameters:
    Location: 's3://amzn-s3-demo-bucket/MyFileName.yaml'
Resources:
  ...
```

### 변형이 템플릿의 섹션 내에 포함되는 경우의 구문
<a name="aws-include-syntax-within-section"></a>

CloudFormation 템플릿의 섹션 내에서 이 변환을 선언하려면 `Fn::Transform` 내장 함수와 다음 구문을 사용합니다.

#### JSON
<a name="aws-include-syntax-within-section.json"></a>

```
{
  "Fn::Transform":{
    "Name":"AWS::Include",
    "Parameters":{
      "Location":"s3://amzn-s3-demo-bucket/MyFileName.json"
    }
  }
}
```

#### YAML
<a name="aws-include-syntax-within-section.yaml"></a>

```
Fn::Transform:
  Name: AWS::Include
  Parameters:
    Location: s3://amzn-s3-demo-bucket/MyFileName.yaml
```

자세한 내용은 [`Fn::Transform`](intrinsic-function-reference-transform.md) 섹션을 참조하세요.

### 파라미터
<a name="aws-include-parameters"></a>

`Location`

위치는 구체적인 파일 이름이 S3 버킷인 Amazon S3 URI입니다. 예를 들어 `s3://amzn-s3-demo-bucket/MyFile.yaml`입니다.

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

`AWS::Include` 사용 시 다음 사항을 명심하십시오. 매크로 사용에 대한 자세한 고려 사항은 *AWS CloudFormation 사용 설명서*의 [매크로 고려 사항](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros-overview.html#template-macros-considerations)을 참조하세요.
+ 현재 Amazon S3 URI를 지원하지만, 다른 Amazon S3 형식(예: Amazon S3 ARN)은 없습니다. GitHub 리포지토리와는 반대로, 이름은 Amazon S3 버킷이어야 합니다.
+ Amazon S3 URL에 액세스할 수 있는 사람은 누구나 템플릿에 조각을 포함할 수 있습니다.
+ 템플릿 조각은 유효한 JSON이어야 합니다.
+ 템플릿 조각은 유효한 키 값 객체(예: `"KeyName": "keyValue"`)여야 합니다.
+ `AWS::Include`를 사용하여 `AWS::Include`를 사용하는 템플릿 코드 조각을 참조할 수는 없습니다.
+ 코드 조각이 변경되는 경우 스택은 자동으로 해당 변경 사항을 선택하지 않습니다. 해당 변경 사항을 가져오려면 업데이트된 코드 조각으로 스택을 업데이트해야 합니다. 스택을 업데이트할 경우 포함된 코드 조각이 모르는 사이에 변경되지 않았는지 확인하십시오. 스택을 업데이트하기 전에 확인하려면 변경 세트를 확인하십시오.
+ 템플릿과 코드 조각을 생성할 때 YAML 및 JSON 템플릿 언어를 혼합할 수 있습니다.
+ 현재 YAML 코드 조각의 간편 표기법 사용은 지원되지 않습니다.
+ `AWS::Include`를 사용하여 교차 리전 복제 Amazon S3 URI를 제공할 수 있습니다. 교차 리전 복제 객체에 액세스할 때는 반드시 Amazon S3 버킷을 확인하십시오. 자세한 내용은 *Amazon S3 사용 설명서*의 [리전 내 및 리전 간 객체 복제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)를 참조하세요.

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

다음 예제에서는 `AWS::Include` 변형을 사용하여 대기 조건 핸들을 실행하는 방법을 보여줍니다. *amzn-s3-demo-bucket*을 실제 버킷 이름으로 대체합니다.

S3 버킷에서 다음 콘텐츠와 함께 `single_wait_condition.yaml`이라는 YAML 파일을 저장합니다.

```
MyWaitCondition:
  Type: AWS::CloudFormation::WaitCondition
  Properties:
    Handle: !Ref MyWaitHandle
    Timeout: '4500'
```

그런 다음 JSON 또는 YAML 형식을 사용하여 이 파일을 참조할 수 있습니다.

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

```
{
   "Resources": {
      "MyWaitHandle": {
         "Type": "AWS::CloudFormation::WaitConditionHandle"
      },
      "Fn::Transform": {
         "Name": "AWS::Include",
         "Parameters": {
            "Location": "s3://amzn-s3-demo-bucket/single_wait_condition.yaml"
         }
      }
   }
}
```

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

```
Resources:
  MyWaitHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
  Fn::Transform:
    Name: AWS::Include
    Parameters:
      Location: "s3://amzn-s3-demo-bucket/single_wait_condition.yaml"
```

자세한 내용은 *AWS CloudFormation 사용 설명서*의 [CloudFormation 템플릿에서 대기 조건 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.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) 섹션을 참조하세요.

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

이 주제에서는 `AWS::SecretsManager` 변환 및 [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 리소스 유형을 사용하여 보안 암호 교체를 수행할 Lambda 함수를 지정하는 방법을 설명합니다.

`AWS::SecretsManager` 변환은 스택 템플릿에서 참조할 때 변경 세트를 사용하여 스택을 생성하거나 업데이트하는 경우 보안 암호 교체를 위한 Lambda 함수를 자동으로 생성하는 CloudFormation 매크로입니다. Lambda 함수는 처리된 템플릿의 중첩 스택에 배치됩니다. [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 리소스의 [RotationType](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-rotationtype) 속성 값을 기반으로 [AWS Secrets Manager 교체 Lambda 함수](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas) 리포지토리에서 함수 템플릿을 사용합니다.

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

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

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

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

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

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

```
{
  "Transform":"AWS::SecretsManager-2020-07-23",
  "Resources":{
    ...
  }
}
```

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

```
Transform: AWS::SecretsManager-2020-07-23
Resources:
  ...
```

`AWS::SecretsManager` 변환은 추가 파라미터가 없는 독립 실행형 선언입니다. 대신 스택 템플릿에서 [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 리소스의 [HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) 속성을 구성합니다. [HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) 속성은 Lambda 함수를 지정하여 보안 암호 교체를 수행합니다.

## `AWS::SecretsManager-2024-09-16`의 새로운 기능
<a name="aws-secretsmanager-new-version"></a>

최신 버전의 `AWS::SecretsManager` 변환(`AWS::SecretsManager-2024-09-16`)에는 다음과 같은 개선 사항이 도입되었습니다.
+ **자동 Lambda 업그레이드** - CloudFormation 스택을 업데이트하면 이제 Lambda 함수가 런타임 구성 및 내부 종속 항목을 자동으로 업데이트합니다. 이를 통해 Secrets Manager에서 보안 암호 교체를 관리하는 가장 안전하고 신뢰할 수 있는 버전의 코드를 사용할 수 있습니다.
+ **추가 속성 지원** - 새 변환은 `DependsOn` 속성을 포함하여 `HostedRotationLambda` 속성과 함께 사용할 때 `AWS::SecretsManager::RotationSchedule` 리소스 유형에 대한 추가 리소스 속성을 지원합니다.
**참고**  
두 버전 모두 `DeletionPolicy` 및 `UpdateReplacePolicy` 속성을 지원합니다.

`AWS::SecretsManager` 변환의 이 새 버전에 대해 자세히 알아보려면 AWS 보안 블로그의 [Introducing an enhanced version of the AWS Secrets Manager transform: AWS::SecretsManager-2024-09-16](https://aws.amazon.com/blogs/security/introducing-an-enhanced-version-of-the-aws-secrets-manager-transform-awssecretsmanager-2024-09-16/)를 참조하세요.

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

다음 예제에서는 템플릿에서 `AWS::SecretsManager` 변환(`AWS::SecretsManager-2024-09-16`) 및 [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 리소스를 사용하는 방법을 보여줍니다. 이 예제에서 CloudFormation은 MySQL 단일 사용자 보안 암호 교체를 위한 Lambda 함수를 자동으로 생성합니다.

보안 암호는 매일 자정(UTC)에 자동으로 교체되도록 설정됩니다. 교체 프로세스를 완료하는 데 최대 2시간이 걸릴 수 있습니다. 교체 일정을 업데이트해도 즉시 교체가 시작되지 않습니다.

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

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Transform":"AWS::SecretsManager-2024-09-16",
  "Resources":{

  ...

    "MySecretRotationSchedule":{
      "Type":"AWS::SecretsManager::RotationSchedule",
      "DependsOn":"logical name of AWS::SecretsManager::SecretTargetAttachment resource",
      "Properties":{
        "SecretId":{
          "Ref":"logical name of AWS::SecretsManager::Secret resource"
        },
        "HostedRotationLambda":{
          "RotationType":"MySQLSingleUser",
          "RotationLambdaName":"name of Lambda function to be created",
          "VpcSecurityGroupIds":{
            "Fn::GetAtt":[
              "logical name of AWS::EC2::SecurityGroup resource",
              "GroupId"
            ]
          },
          "VpcSubnetIds":{
            "Fn::Join":[
              ",",
              [
                {
                  "Ref":"logical name of primary subnet"
                },
                {
                  "Ref":"logical name of secondary subnet"
                }
              ]
            ]
          }
        },
        "RotationRules":{
          "ScheduleExpression":"cron(0 0 * * ? *)",
          "Duration":"2h"
        },
        "RotateImmediatelyOnUpdate":false
      }
    }
  }
}
```

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

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::SecretsManager-2024-09-16
Resources:

  ...

  MySecretRotationSchedule:
    Type: AWS::SecretsManager::RotationSchedule
    DependsOn: logical name of AWS::SecretsManager::SecretTargetAttachment resource
    Properties:
      SecretId: !Ref logical name of AWS::SecretsManager::Secret resource
      HostedRotationLambda:
        RotationType: MySQLSingleUser
        RotationLambdaName: name of Lambda function to be created
        VpcSecurityGroupIds: !GetAtt logical name of AWS::EC2::SecurityGroup resource.GroupId
        VpcSubnetIds:
          Fn::Join:
          - ","
          - - Ref: logical name of primary subnet
            - Ref: logical name of secondary subnet
      RotationRules:
        ScheduleExpression: cron(0 0 * * ? *)
        Duration: 2h
      RotateImmediatelyOnUpdate: false
```

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

보안 암호 교체를 설정하는 데 사용할 수 있는 전체 CloudFormation 템플릿 예제는 `AWS::SecretsManager::RotationSchedule` 리소스의 [예제](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html#aws-resource-secretsmanager-rotationschedule--examples) 섹션을 참조하세요.

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

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

이 주제에서는 `AWS::Serverless` 변형을 사용하여 AWS Serverless Application Model(AWS SAM) 구문으로 작성된 템플릿을 처리하고 규정 준수 CloudFormation 템플릿으로 변환하는 방법을 설명합니다.

`AWS::Serverless` 변환 사용에 대한 자세한 내용은 GitHub의 [AWS SAM transform](https://github.com/aws/serverless-application-model)을 참조하세요.

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

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

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

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

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

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

```
{
  "Transform":"AWS::Serverless-2016-10-31",
  "Resources":{
    ...
  }
}
```

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

```
Transform: AWS::Serverless-2016-10-31
Resources:
  ...
```

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

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

다음 예제에서는 `AWS::Serverless` 변환 및 AWS SAM 구문을 사용하여 Lambda 함수 및 해당 실행 역할의 선언을 간소화하는 방법을 보여줍니다.

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

```
{
  "Transform":"AWS::Serverless-2016-10-31",
  "Resources":{
    "MyFunction":{
      "Type":"AWS::Serverless::Function",
      "Properties":{
        "Handler":"index.handler",
        "Runtime":"nodejs20.x",
        "CodeUri":"s3://amzn-s3-demo-bucket/MySourceCode.zip"
      }
    }
  }
}
```

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

```
Transform: AWS::Serverless-2016-10-31
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs20.x
      CodeUri: 's3://amzn-s3-demo-bucket/MySourceCode.zip'
```

템플릿에서 변경 세트 생성 시 CloudFormation은 변환에서 정의한 대로 AWS SAM 구문을 확장합니다. 처리된 템플릿은 Lambda 함수 및 실행 역할을 선언하며 `AWS::Serverless::Function` 리소스를 확장합니다.

```
{
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Handler": "index.handler",
        "Code": {
          "S3Bucket": "amzn-s3-demo-bucket",
          "S3Key": "MySourceCode.zip"
        },
        "Role": {
          "Fn::GetAtt": ["MyFunctionRole", "Arn"]
        },
        "Runtime": "nodejs20.x"
      }
    },
    "MyFunctionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [{
            "Action": ["sts:AssumeRole"],
            "Effect": "Allow",
            "Principal": {
              "Service": ["lambda.amazonaws.com"]
            }
          }]
        }
      }
    }
  }
}
```

## `AWS::LanguageExtensions`과 함께 `AWS::Serverless` 사용
<a name="aws-serverless-language-extensions"></a>

`AWS::Serverless` 및 `AWS::LanguageExtensions` 변환을 모두 사용하는 경우 `AWS::ApiGateway::Stage`와 같은 리소스를 참조하려면 스테이지 이름이 비 `NoEcho` 파라미터 값으로 전달될 때 특수 구문이 필요합니다.

참조(`MyApi.Stage`)에 AWS SAM 구문을 사용하는 대신 `Fn::Sub`를 사용하여 논리적 ID 참조를 생성합니다. 예를 들어 `"Ref": {"Fn::Sub": "${MyApi}${StageName}Stage"}`입니다. 이렇게 하면 런타임 시 올바른 논리적 ID가 빌드됩니다.

이 특수 형식의 이유는 두 변환이 값을 다르게 처리하기 때문입니다.
+ `AWS::LanguageExtensions`는 내장 함수를 실제 값으로 해석합니다.
+ `AWS::Serverless`는 정적 값을 수신하는지 아니면 내장 함수를 수신하는지에 따라 서로 다른 논리적 ID를 생성합니다.

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

서버리스 애플리케이션과 AWS Serverless Application Model(AWS SAM)에 대한 자세한 내용은 [AWS Serverless Application Model 개발자 안내서](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)를 참조하세요.

AWS SAM에 특정한 리소스 및 속성 유형은 *AWS Serverless Application Model 개발자 안내서*의 [AWS SAM resources and properties](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-resources-and-properties.html)를 참조하세요.

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

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

이 주제에서는 `AWS::ServiceCatalog` 변환을 사용하여 CloudFormation 템플릿에서 기존의 AWS Service Catalog에서 프로비저닝된 제품으로부터 출력을 참조하는 방법을 설명합니다.

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

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

출력 값이 필요한 경우, 프로비저닝된 제품의 이름과 출력 키 이름을 입력합니다.

템플릿에서 프로비저닝된 제품과 키 이름을 여러 개 참조할 수 있으며, 최대 개수는 템플릿당 20개입니다. 프로비저닝하는 동안 변환을 실행하면 각각의 참조된 프로비저닝 제품 및 키에서 값을 검색하여 CloudFormation 템플릿에서 출력 값을 대체합니다.

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

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

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

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

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

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

```
Transform: AWS::ServiceCatalog
Resources:
  ...
```

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

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

다음 예제는 CloudFormation 템플릿에서 Service Catalog의 프로비저닝된 기존 제품으로부터 출력을 참조하는 방법을 보여줍니다.

이 예제에서 `SampleProvisionedProduct`는 이전에 생성된 프로비저닝 제품이고, `SampleOutputKey`는 이 프로비저닝된 제품의 출력 키입니다.

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

이 예제는 작업 버전입니다.

문자열 리터럴로 값을 묶지 않은 템플릿 버전은 실패합니다.

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Transform":"AWS::ServiceCatalog",
  "Resources":{
    "ExampleParameter":{
      "Type":"AWS::SSM::Parameter",
      "Properties":{
        "Type":"String",
        "Value":"[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]"
      }
    }
  }
}
```

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

예제 1–4는 유효한 템플릿입니다. 예제 1과 2는 변환과 값이 문자열 리터럴입니다.

예제 5는 유효한 템플릿이 아닙니다. 값은 문자열 `'`이나 `"`, 또는 `>-`로 묶어야 합니다. 그렇지 않은 경우, 사용자가 오류를 수신합니다.

```
// Example 1 
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::ServiceCatalog'
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: '[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]'
     
// Example 2
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: '[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]'
     
     
// Example 3 
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: "[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]"
     
     
// Example 4 
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: >-
        [[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]
     
     
// Example 5 
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter2:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: [[servicecatalog:provisionedproduct:SSMProductProvisionedProduct:SampleOutputKey]]
```