AWS SAM テンプレートの構造分析 - AWS Serverless Application Model

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::FunctionAWS::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 テンプレートには、いくつかの重要なセクションが含まれる場合があります。必須のセクションは、TransformResources のみです。

テンプレートセクションは任意の順序で含めることができますが、テンプレートを作成するときは、以下のリストで説明されている論理的な順序の使用が役に立つ場合があります。これは、1 つのセクションの値が前のセクションの値を参照している可能性があるためです。

Transform (必須)

AWS SAM テンプレートの場合は、AWS::Serverless-2016-10-31 の値を使用してこのセクションを含める必要があります。

追加の transform はオプションです。Transform の詳細については、AWS CloudFormation ユーザーガイドの「Transform」を参照してください。

Globals (オプション)

すべてのサーバーレス関数、API、および単純テーブルに共通のプロパティです。Globals セクションで定義されているプロパティは、すべての AWS::Serverless::FunctionAWS::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) バケットなどのスタックリソースとそれらのプロパティです。テンプレートの ResourcesOutputs セクションのリソースを参照できます。

このセクションは、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 アプリケーションのデプロイ」の手順に従ってください。