AWS SAM(1)Serverless Application Modelの概要

AWS SAMとは

AWS SAMは、サーバレスアプリケーションを構築するための オープンソース フレームワークであり、数行の設定のみで、必要なアプリケーションを定義できる。AWS SAMは、CloudFormation拡張テンプレート仕様 および AWS SAM CLI コンポーネントから構成される。

AWS SAMを使用することで、関連するコンポーネントとリソースの整理、操作が単一のスタックで管理できる。また、メモリやタイムアウト値などの設定値をリソース間で共有することも可能である。また、CloudFormationの拡張機能 であるため、 CloudFormationに対応するリソースと組み合わせてリソースを管理することができる。

AWS SAMには、ローカルの開発環境でLambda実行環境と同等の機能を提供する。これを用いることで、AWS上にデプロイする前に、ローカルの開発環境で動作や問題等を確認することができる。

また、Lambdaを安全にデプロイするために、 一定期間の間に段階的に新しいバージョンをデプロイすることも可能 である。

SAM CLI

sam init

プロジェクト名として指定したディレクトリの下に、sam-app ディレクトリと、SAMプロジェクトおよびサンプルテンプレートを作成する。

sam validate

SAMテンプレートが有効であるかどうか検証する。AWS CLI Configureにてデフォルトリージョンを設定していない場合には、以下のように環境変数を与える必要がある。

env AWS_DEFAULT_REGION=ap-northeast-1 sam validate

sam build

sam-app ディレクトリ直下に .aws-sam を作成し、この下に、指定した実行環境をターゲットとする デプロイメントアーティファクト を作成する。例えば、LambdaをPythonで記述した場合に、 requirements.txt にて依存関係のあるライブラリを指定することができるが、 sam build はこれらの依存関係を適切に処理する。

sam package

デプロイメントアーティファクト を圧縮してS3にアップロードする。また、パッケージ化されたSAMテンプレート(packaged.yaml)を作成する。パッケージ化されたSAMテンプレートには、S3にアップロードした デプロイメントアーティファクト へのリンク先が記述されている。sam deploy コマンドは、 sam package コマンドを暗黙的に実行するため、本来は sam deploy コマンドを実行するだけでよい。

sam deploy

アプリケーションのデプロイを行う。 --guided パラメータを付与することで、インタラクティブモードを起動することができる。

sam logs

Lambdaが生成するログを確認することができる。

SAMテンプレート

SAMテンプレートには、 Globals セクションが設けられており、ランタイムやメモリなどの共通設定をこれに格納することができる。なお、以下のプロパティはサポートされていない。

  Function:
    Role:
    Policies:
    FunctionName:
    Events:

  Api:
    StageName:
    DefinitionBody:

SAMテンプレートでは、以下のリソースタイプがサポートされている。AWS :: Serverless :: LayerVersion のみ DeletionPolicy をサポートしている。また、 AWS :: Serverless :: Api 内で記述するOpenAPIドキュメントは、 一部のAPI Gateway拡張(x-amazon-apigateway-) のみサポートしていることに注意が必要である。

タイプ 作成されるリソース 備考
AWS :: Serverless :: Api API Gateway OpenAPIを使用してAPIを定義する
AWS :: Serverless :: Application SAM Serverless Application Repositoryのリソースをデプロイ可能
AWS :: Serverless :: Function Lambda, IAM Role
AWS :: Serverless :: HttpApi API Gateway Http Api
AWS :: Serverless :: LayerVersion Lambda Layer Version
AWS :: Serverless :: SimpleTable DynamoDB プライマリキーのみのテーブルを作成

ポリシーテンプレート

SAMでは、Lambdaのアクセス許可をポリシーテンプレートという形で指定することができる。ポリシーテンプレートは、あらかじめAWSが用意したポリシーパターンである。

テスト

sam local コマンドを用いることでローカルで、API GatewayやLambdaを実行させることができ、開発環境でアプリケーションの動作を検証することができる。