AWS::Serverless 変換 - AWS CloudFormation

これは新しい AWS CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『AWS CloudFormation ユーザーガイド』を参照してください。

AWS::Serverless 変換

このトピックでは、AWS::Serverless 変換を使用して AWS サーバーレスアプリケーションモデル (AWS SAM) 構文で記述されたテンプレートを処理し、準拠した CloudFormation テンプレートに変換する方法について説明します。

AWS::Serverless 変換の使用に関する詳細については、「GitHub」の「AWS SAM 変換」を参照してください。

使用方法

AWS::Serverless 変換を使用するには、CloudFormation テンプレートの最上位レベルで宣言する必要があります。AWS::Serverless を他のテンプレートセクションに埋め込まれたトランスフォームとして使用することはできません。

宣言では、リテラル文字列 AWS::Serverless-2016-10-31 を値として使用する必要があります。変換値の指定には、パラメータまたは関数は使用できません。

構文

CloudFormation テンプレートでこの変換を宣言するには、次の構文を使用します。

JSON

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

YAML

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

AWS::Serverless 変換は追加のパラメータがないスタンドアロン宣言です。

次の例では、AWS::Serverless 変換および AWS SAM 構文を使用し、Lambda 関数およびその実行ロールの宣言を簡素化する方法について説明します。

JSON

{ "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

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

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 を作成します。

サーバーレスアプリケーションおよび AWS サーバーレスアプリケーションモデル (AWS SAM) の詳細については、「AWS Serverless Application Model デベロッパーガイド」を参照してください。

AWS SAM 固有のリソースおよびプロパティタイプについては、「AWS Serverless Application Model デベロッパーガイド」の「AWS SAM リソースとプロパティ」を参照してください。

マクロの使用に関する全般情報については、「AWS CloudFormation ユーザーガイド」の「テンプレートマクロを使用して CloudFormation テンプレートでカスタム処理を実行する」を参照してください。