クラウドサービス

AWS Serverless Application Model (SAM)

サーバーレスアプリを簡潔なテンプレートで定義しデプロイできるオープンソースのフレームワーク。CloudFormation を短い記法に拡張し、ローカル実行や CI/CD まで一気通貫で支援する。

中級DVA-C02SAA-C03DOP-C02運用上の優秀性信頼性コスト最適化
最終更新: 2026-07-29公式ドキュメント
3つの要点
TL;DR
  1. 短いテンプレートで関数、入口、権限、イベントをまとめて定義する。
  2. 構築物を S3 や ECR へ置き、CloudFormation の変更として反映する。
  3. 失敗時は構築、変換、権限、スタック更新の段階を分けて調べる。

解決する課題

サーバーレスアプリは Lambda 関数だけでなく、API Gateway・DynamoDB テーブル・イベントソース・IAM ロールなど多数のリソースの組み合わせで成り立ちます。これを素の CloudFormation で書くと、1 つの API つき Lambda を定義するだけでも記述が長くなりがちでした。SAM なら:

  • サーバーレス向けの 短い専用記法で、関数や API をまとめて宣言できる
  • ロールやイベント連携など定型的な配線を自動生成し、記述量を大幅に減らせる
  • ローカルでの実行・テストから本番デプロイまでを 1 つのツールチェーンで回せる

SAM は単独のマネージドサービスというより、CloudFormation の上に乗る オープンソースのフレームワーク兼 CLI です。インフラをコードで宣言する点は他クラウドの IaC(例: Azure では Bicep、汎用では Terraform)に近く、その中でもサーバーレスに特化している点が特徴です。

主要概念と用語

  • SAM テンプレート: Transform: AWS::Serverless-2016-10-31 を宣言した YAML / JSON。CloudFormation テンプレートの上位互換
  • Transform マクロ: デプロイ時に SAM の短い記法を通常の CloudFormation リソースへ展開する仕組み
  • AWS::Serverless::Function: Lambda 関数を簡潔に定義するリソース型。イベントソースや権限もまとめて書ける
  • AWS::Serverless::Api: API Gateway を定義するリソース型。関数の Events から暗黙的に生成されることも多い
  • Events(イベントソース): Api・S3・SQS・DynamoDB・Schedule など、関数を起動するトリガーの宣言
  • Policies / Policy Templates: 関数の実行ロールに与える権限。よくあるパターンはテンプレート名で簡潔に指定できる
  • SAM CLI: ビルド・ローカル実行・デプロイを行うコマンドラインツール(sam build / sam local / sam deploy

仕様・制限・クォータ

  • テンプレート冒頭の Transform 宣言が必須で、これがないと SAM の短い記法は展開されない
  • SAM の機能の多くは最終的に CloudFormation のスタックとして適用されるため、スタックやリソースに関する CloudFormation 側の上限がそのまま効く
  • sam local でのローカル実行には Docker が必要で、Lambda 実行環境を模したコンテナで関数を動かす
  • ローカル実行はあくまで近似であり、IAM 権限の評価やサービス間連携など本番環境とは挙動が異なる部分がある
  • デプロイ成果物はアーティファクト用の S3 バケット(コンテナイメージなら ECR) を経由する
既存の CloudFormation と混在できる

SAM テンプレートは CloudFormation の上位互換なので、AWS::Serverless::* の短い記法と、生の AWS::S3::Bucket などの通常リソースを同じテンプレートに混在させられます。サーバーレス部分だけ簡潔に書く使い方が可能です。

内部の仕組み

横にスクロール

コードと SAM テンプレートを検証・構築して S3 または ECR へ保存し、CloudFormation 変換と変更セットを経て Lambda などへ反映する経路を示す図
SAM は実行基盤ではなく CloudFormation への入口。失敗した段階を構築・変換・更新に分ける

SAM の中心は Transform という CloudFormation マクロです。sam deploy を実行すると、CLI はまずローカルでビルドした成果物をアップロードし、SAM テンプレートを CloudFormation に渡します。CloudFormation 側で Transform が適用されると、AWS::Serverless::Function のような短い記法が、Lambda 関数・実行ロール・API Gateway・パーミッションといった複数の通常リソースへ展開されます。

  • 関数の Events に Api を書くと、対応する API Gateway とメソッド・統合・呼び出し許可が自動生成される
  • Policies に権限を書くと、それを反映した IAM ロールが生成される
  • 展開後は通常の CloudFormation スタックとして扱われるため、変更セット(Change Set)やドリフト検出などの仕組みがそのまま使える

sam build はソースと依存関係をビルドして配置し、sam local invoke / sam local start-api は Docker 上で Lambda 実行環境を再現してローカルテストを可能にします。つまり、開発時はローカルの近似環境、デプロイ時は CloudFormation という二段構えになっています。

設計パターン / ベストプラクティス

  • サーバーレス中心の構成では SAM テンプレートを単一の真実の源とし、関数・API・テーブルをまとめて管理する
  • 実行ロールは ポリシーテンプレートや最小権限の記述で絞り、ワイルドカードの広い権限を避ける
  • 設定値は Parameters とステージごとのパラメータファイルで切り替え、テンプレート本体は環境非依存に保つ
  • 本番反映前に Change Set を確認してから適用し、想定外の差分を防ぐ
  • 段階的リリースが必要なら AWS::Serverless::Function の DeploymentPreference(CodeDeploy 連携によるカナリア / 線形デプロイ)を活用する
  • ローカルテストはあくまで近似と割り切り、統合テストはデプロイ済みの実環境でも行う

運用・監視

  • 関数のログは CloudWatch Logs、分散トレースは AWS X-Ray で確認する(テンプレートでトレース有効化を宣言できる)
  • デプロイは CloudFormation スタックとして履歴が残るため、スタックイベントで失敗箇所を追跡できる
  • 失敗時は ロールバックが効く。リソース作成エラーの原因(権限・命名・依存)はスタックイベントで切り分ける
  • CI/CD では sam buildsam deploy をパイプラインに組み込み、SAM Pipelines で雛形を生成して CodePipeline などと連携する
  • ローカルで sam local start-api を使えば、デプロイせずに API の動作確認やデバッグができる

コスト

  • SAM フレームワーク自体に追加料金はかからない(オープンソースのツール)。課金されるのは展開された Lambda・API Gateway・DynamoDB などの実リソースの利用分
  • デプロイ成果物を置く S3 / ECR の保管・転送にはそれぞれの料金が発生する
  • サーバーレス構成はアイドル時の固定費が小さく、使った分への課金になりやすいため、過剰なプロビジョニングを避けやすい
  • 段階デプロイで CodeDeploy を併用する場合は、その関連リソースのコストも考慮する

セキュリティ

  • 関数の実行ロールは 最小権限で定義し、ポリシーテンプレートを使うときも付与範囲を確認する
  • 機密値はテンプレートに直書きせず、Secrets Manager / SSM Parameter Store から参照する
  • API には認証・認可(IAM 認可・Cognito・Lambda オーソライザーなど)を設定し、公開範囲を絞る
  • テンプレートとパラメータはバージョン管理し、本番反映は Change Set とレビューを通す
  • デプロイに使う CI/CD 実行ロールも最小権限にし、広すぎる管理者権限を避ける

関連サービス・比較

サーバーレス向け IaC として、より汎用的な AWS CDK とよく比較されます。SAM は宣言的な YAML 記法でサーバーレスに特化し、CDK は一般のプログラミング言語でより広い構成を組み立てられます。

観点SAMAWS CDK
記述スタイル宣言的な YAML / JSONTypeScript 等のコード
得意領域サーバーレス特化汎用 IaC 全般
変換先CloudFormationCloudFormation
ローカル実行SAM CLI で関数を実行SAM CLI と連携可能
学習のしやすさ短記法で習得が速い言語知識が前提

ハンズオン / CLI例

# 新規プロジェクトの雛形を対話で作成
sam init

# 関数と依存関係をビルド(必要に応じてコンテナ内でビルド)
sam build

# ローカルで API を起動して動作確認(Docker が必要)
sam local start-api

# ガイド付きでデプロイ(初回は設定が保存される)
sam deploy --guided

AWS Service

AWS Serverless Application Model (SAM)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

コンピューティング

比較で見る軸

クラウド: AWS / カテゴリ: コンピューティング / 難易度: intermediate

導入後に効く点

構築物を S3 や ECR へ置き、CloudFormation の変更として反映する。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
AWS
カテゴリ
コンピューティング
難易度
intermediate
関連資格
DVA-C02 / SAA-C03 / DOP-C02
設計柱
operational / reliability / cost

判断チェックリスト

  • 自社の用途が「コンピューティング / operational」に近いか確認する。
  • 強みである「短いテンプレートで関数、入口、権限、イベントをまとめて定義する。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

コンピューティングoperationalreliabilitycostDVA-C02