AWS SAM テンプレートの構造分析
AWS SAM テンプレートファイルは、AWS CloudFormation ユーザーガイドの「Template anatomy」で説明されている AWS CloudFormation テンプレートファイルの形式に追随しています。以下は、AWS SAM テンプレートファイルと AWS CloudFormation テンプレートファイルの主な違いです。
-
Transform 宣言。
Transform: AWS::Serverless-2016-10-31
宣言は AWS SAM テンプレートファイルに必須です。この宣言は、AWS CloudFormation テンプレートファイルを AWS SAM テンプレートファイルとして識別します。Transform の詳細については、AWS CloudFormation ユーザーガイドの「Transform」を参照してください。 -
Globals セクション。
Globals
セクションは、AWS SAM に固有のセクションです。これは、すべてのサーバーレス関数と API に共通するプロパティを定義します。Globals
セクションで定義されているプロパティは、すべてのAWS::Serverless::Function
、AWS::Serverless::Api
、およびAWS::Serverless::SimpleTable
リソースによって継承されます。このセクションの詳細については、「AWS SAM テンプレートの Globals セクション」を参照してください。 -
Resources セクション AWS SAM テンプレートの
Resources
セクションには、AWS CloudFormation リソースと AWS SAM リソースの組み合わせを含めることができます。AWS CloudFormation リソースの詳細については、AWS CloudFormation ユーザーガイドの「AWS resource and property types reference」を参照してください。AWS SAM リソースの詳細については、「AWS SAM リソースとプロパティのリファレンス」を参照してください。 -
Parameters セクション
Parameters
セクションで宣言されるオブジェクトによって、sam deploy --guided
コマンドがユーザーに追加のプロンプトを表示するようになります。宣言されたオブジェクトと対応するプロンプトの例については、AWS SAM CLI コマンドリファレンスの「sam deploy」を参照してください。
AWS SAM テンプレートファイルにあるその他すべてのセクションは、同じ名前の AWS CloudFormation テンプレートファイルのセクションに対応しています。
YAML
以下の例は、YAML 形式のテンプレートフラグメントを示しています。
Transform: AWS::Serverless-2016-10-31 Globals:
set of globals
Description:String
Metadata:template metadata
Parameters:set of parameters
Mappings:set of mappings
Conditions:set of conditions
Resources:set of resources
Outputs:set of outputs
テンプレートセクション
AWS SAM テンプレートには、いくつかの重要なセクションが含まれる場合があります。必須のセクションは、Transform
と Resources
のみです。
テンプレートセクションは任意の順序で含めることができますが、テンプレートを作成するときは、以下のリストで説明されている論理的な順序の使用が役に立つ場合があります。これは、1 つのセクションの値が前のセクションの値を参照している可能性があるためです。
- Transform (必須)
-
AWS SAM テンプレートの場合は、
AWS::Serverless-2016-10-31
の値を使用してこのセクションを含める必要があります。追加の transform はオプションです。Transform の詳細については、AWS CloudFormation ユーザーガイドの「Transform」を参照してください。
- Globals (オプション)
-
すべてのサーバーレス関数、API、および単純テーブルに共通のプロパティです。
Globals
セクションで定義されているプロパティは、すべてのAWS::Serverless::Function
、AWS::Serverless::Api
、およびAWS::Serverless::SimpleTable
リソースによって継承されます。このセクションは AWS SAM に固有です。AWS CloudFormation テンプレートに対応するセクションはありません。
- Description (オプション)
-
テンプレートを説明するテキスト文字列です。
このセクションは、AWS CloudFormation テンプレートの
Description
セクションに直接対応します。 - Metadata (オプション)
-
テンプレートに関する追加情報を提供するオブジェクトです。
このセクションは、AWS CloudFormation テンプレートの
Metadata
セクションに直接対応します。 - Parameters (オプション)
-
実行時 (スタックを作成または更新するとき) にテンプレートに渡す値です。テンプレートの
Resources
およびOutputs
セクションからのパラメータを参照できます。sam deploy
コマンドの--parameter-overrides
パラメータ (および設定ファイルのエントリ) を使用することで渡される値で、AWS SAM テンプレートファイルよりも優先されます。sam deploy
コマンドの詳細については、AWS SAM CLI コマンドリファレンスの「sam deploy」を参照してください。設定ファイルの詳細については、「AWS SAM CLI の設定ファイル」を参照してください。 - Mappings (オプション)
-
キーと関連する値のマッピングで、条件パラメータ値の指定に使用でき、ルックアップテーブルに似ています。
Resources
セクションとOutputs
セクションでFn::FindInMap
組み込み関数を使用することによって、キーを対応する値と一致させることができます。このセクションは、AWS CloudFormation テンプレートの
Mappings
セクションに直接対応します。 - Conditions (オプション)
-
スタックの作成中または更新中に、特定のリソースが作成されるかどうか、または特定のリソースプロパティに値が割り当てられるかどうかを制御する条件です。例えば、スタックが実稼働用であるかテスト環境用であるかに依存するリソースを、条件付きで作成できます。
このセクションは、AWS CloudFormation テンプレートの
Conditions
セクションに直接対応します。 - Resources (必須)
-
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスや Amazon Simple Storage Service (Amazon S3) バケットなどのスタックリソースとそれらのプロパティです。テンプレートの
Resources
とOutputs
セクションのリソースを参照できます。このセクションは、AWS CloudFormation テンプレートの
Resources
セクションに似ています。AWS SAM テンプレートのこのセクションには、AWS SAM リソースに加えて AWS CloudFormation リソースを含めることができます。 - Outputs (オプション)
-
スタックのプロパティを表示するたびに返される値です。例えば、S3 バケット名の出力を宣言してから、
aws cloudformation describe-stacks
AWS Command Line Interface (AWS CLI) コマンドを呼び出して名前を表示することができます。このセクションは、AWS CloudFormation テンプレートの
Outputs
セクションに直接対応します。
次のステップ
AWS SAM テンプレートファイルが含まれるサンプルサーバーレスアプリケーションをダウンロードしてデプロイするには、「AWS SAM の開始方法」を参照して、「チュートリアル: Hello World アプリケーションのデプロイ」の手順に従ってください。