

これは新しい CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『[AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.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)」を参照してください。