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を実行させることができ、開発環境でアプリケーションの動作を検証することができる。