

これは新しい 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`

この場所は Amazon S3 URI で、S3 バケット内の特定ファイル名です。例えば、`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 ARN など) 他の Amazon S3 形式はサポートされません。これは GitHub リポジトリでなく、Amazon S3 バケットである必要があります。
+ Amazon S3 URL にアクセスできるユーザーであれば、誰でもそのテンプレートにスニペットを含めることができます。
+ テンプレートスニペットは、有効な JSON である必要があります。
+ テンプレートのスニペットは、有効なキーと値のオブジェクトである必要があります (例えば、`"KeyName": "keyValue"`)。
+ `AWS::Include` を使用するテンプレートスニペットを参照するために `AWS::Include` を使用することはできません。
+ スニペットが変更された場合は、スタックはその変更を自動的に検知しません。これらの変更を取得するには、更新されたスニペットを使用してスタックを更新する必要があります。スタックを更新する場合、含まれるスニペットが知らない間に変更されていないことを確認してください。スタックを更新する前に確認するには、変更セットを確認します。
+ テンプレートとスニペットを作成する場合、YAML と JSON テンプレート言語を組み合わせることができます。
+ 現在、YAML スニペットの簡易表記の使用はサポートされていません。
+ クロスリージョンレプリケーション Amazon S3 URI を `AWS::Include` で指定できます。クロスリージョンレプリケーションオブジェクトにアクセスする際、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* を実際のバケット名に置き換えます。

まず、`single_wait_condition.yaml` という名前の YAML ファイルを次の内容の S3 バケットに保存します。

```
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 パラメータの更新が適用されなくなります。その代わりに元のテンプレートを指定して、パラメータが現在の値で再解決されるようにします。
+ 短縮形式の YAML 構文は、`AWS::LanguageExtensions` 変換でのみ使用できる組み込み関数のテンプレート内ではサポートされていません。これらの関数に対する明示的なリファレンスを使用します。例えば、`!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>

次の例では、変換によって定義される `Fn::Length` 組み込み関数を使用するため、`AWS::LanguageExtensions` 変換を使用する方法が示されています。

### 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` 変換は CloudFormation マクロであり、スタックテンプレートで参照されると、変更セットを使用してスタックを作成または更新するとき、シークレットのローテーションに Lambda 関数を自動的に生成します。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 でシークレットのローテーションを管理するコードの最も安全で信頼性の高いバージョンを使用できます。
+ **追加の属性のサポート** – 新しい変換を `HostedRotationLambda` プロパティと一緒に使用すると、`DependsOn` 属性を含む `AWS::SecretsManager::RotationSchedule` リソースタイプの追加のリソース属性がサポートされます。
**注記**  
どちらのバージョンも `DeletionPolicy` 属性と `UpdateReplacePolicy` 属性をサポートしています。

`AWS::SecretsManager` 変換のこの新しいバージョンの詳細については、AWS セキュリティブログの「[AWS Secrets Manager 変換の強化バージョンの導入: 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 関数が自動的に生成されます。

シークレットは、毎日午前 0 時 (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 サーバーレスアプリケーションモデル (AWS SAM) 構文で記述されたテンプレートを処理し、準拠した CloudFormation テンプレートに変換する方法について説明します。

`AWS::Serverless` 変換の使用に関する詳細については、「GitHub」の「[AWS SAM 変換](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 構文を拡張します。処理されたテンプレートによって `AWS::Serverless::Function` リソースが展開され、Lambda 関数および実行ロールが宣言されます。

```
{
  "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::Serverless`と使用する`AWS::LanguageExtensions`
<a name="aws-serverless-language-extensions"></a>

`AWS::Serverless` 変換と `AWS::LanguageExtensions` 変換の両方を使用する場合にステージ名が非 `NoEcho` パラメータ値として渡されるときは、`AWS::ApiGateway::Stage` のようなリソースの参照に特別な構文が必要になります。

参照 (`MyApi.Stage`) に AWS SAM 構文を使用する代わりに、`Fn::Sub` を使用して論理 ID 参照を生成します。例えば、`"Ref": {"Fn::Sub": "${MyApi}${StageName}Stage"}`。そうすることで、実行時に正しい論理 ID が構築されます。

この特別な形式を使用する理由は、これら 2 つの変換が値を異なる方法で処理するからです。
+ `AWS::LanguageExtensions` は、組み込み関数をそれらの実際の値に解決します。
+ `AWS::Serverless` は、静的な値を受け取るか組み込み関数を受け取るかに応じて異なる論理 ID を作成します。

## 関連リソース
<a name="aws-serverless-related-resources"></a>

サーバーレスアプリケーションおよび AWS サーバーレスアプリケーションモデル (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 リソースとプロパティ](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 テンプレートの既存のサービスカタログでプロビジョニングされた製品からの出力を参照する方法が示されます。

以下の例では、`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]]
```