AWS SAM
AWS のサーバーレスアプリケーションを定義・デプロイするためのフレームワーク
AWSサーバーレス
SAM とは
AWS SAM (Serverless Application Model) は、Lambda、API Gateway、DynamoDB などのサーバーレスリソースを簡潔な YAML で定義し、デプロイするフレームワークである。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 リソースタイプ
| タイプ | 説明 |
|---|---|
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 との使い分け
| ケース | 推奨 |
|---|---|
| Lambda + API Gateway | SAM |
| VPC + RDS + ECS | Terraform |
| サーバーレス + 一部 EC2 | SAM + CloudFormation |
| マルチクラウド | Terraform |
AWS SAM の理解を深めるには関連書籍が参考になる。