AWS SAM
AWS のサーバーレスアプリケーションを定義・デプロイするためのフレームワーク
SAM とは
AWS SAM (Serverless Application Model) は、Lambda、API Gateway、DynamoDB などのサーバーレスリソースを簡潔な YAML で定義し、デプロイするフレームワークである。CloudFormation の拡張で、サーバーレスに特化した省略記法を提供する。
CloudFormation との比較
CloudFormation との比較例を示す。
# CloudFormation: 50行以上
# SAM: 10行で同等の定義
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs22.x
Events:
Api:
Type: Api
Properties:
Path: /users/{id}
Method: GET
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref UsersTable
SAM は AWS::Serverless::Function を CloudFormation の AWS::Lambda::Function + AWS::IAM::Role + AWS::ApiGateway::* に自動展開する。
SAM リソースタイプ
SAM リソースタイプを以下に示す。
| タイプ | 説明 |
|---|---|
AWS::Serverless::Function |
Lambda 関数 |
AWS::Serverless::Api |
API Gateway (REST) |
AWS::Serverless::HttpApi |
API Gateway (HTTP API) |
AWS::Serverless::SimpleTable |
DynamoDB テーブル |
AWS::Serverless::LayerVersion |
Lambda Layer |
コマンド
コマンドの例を示す。
sam init # プロジェクトの初期化
sam build # ビルド
sam local invoke # ローカルで Lambda を実行
sam local start-api # ローカルで API Gateway を起動
sam deploy # デプロイ
sam logs -t # ログのテール
sam delete # スタックの削除
ローカル開発
ローカル開発の例を示す。
# Lambda をローカルで実行
sam local invoke MyFunction --event event.json
# API Gateway をローカルで起動
sam local start-api
# → http://localhost:3000 でテスト
ポリシーテンプレート
ポリシーテンプレートの例を示す。
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref UsersTable
- S3ReadPolicy:
BucketName: !Ref DataBucket
- SQSSendMessagePolicy:
QueueName: !GetAtt OrderQueue.QueueName
最小権限の IAM ポリシーを 1 行で定義できる。
Terraform との使い分け
Terraform との使い分けを以下に整理する。
| ケース | 推奨 |
|---|---|
| Lambda + API Gateway | SAM |
| VPC + RDS + ECS | Terraform |
| サーバーレス + 一部 EC2 | SAM + CloudFormation |
| マルチクラウド | Terraform |
AWS SAM の理解を深めるには関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
Terraform
HashiCorp の IaC ツールで、マルチクラウドのインフラをコードで宣言的に管理する
Lambda Layer
Lambda 関数間で共有ライブラリやカスタムランタイムを再利用する仕組み
CloudFormation
AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義・管理する IaC サービス
CDK
TypeScript や Python などのプログラミング言語で AWS インフラを定義する IaC フレームワーク
Infrastructure as Code
インフラの構成をコードで定義し、バージョン管理・自動化・再現性を実現する手法
API Gateway + Lambda 統合
API Gateway と Lambda を組み合わせたサーバーレス API の構築パターン