AWS SAMの基本的な使い方を解説

tkmi
2025-06-24
2025-06-24

お疲れ様です!tkmiです。

Lambdaの開発を簡単に進めるための、強力なフレームワークであるAWS SAM。
今回はAWS SAMを使ってサーバーレスアプリケーションを構築する方法を学びましょう。

AWS SAMとは何か?

AWS SAM(Serverless Application Model)は、Amazon Web Services(AWS)が提供するオープンソースのフレームワークで、サーバーレスアプリケーションの構築、テスト、デプロイを非常に簡単にしてくれます。
AWS Lambda、API Gateway、DynamoDB、S3などのサービスを定義できるテンプレートを使用して、インフラをコードとして管理することが可能です。
このフレームワークを利用することで、開発者は複雑な設定に悩まされることなく、アプリケーションのロジックに集中できるため、開発効率が大幅に向上します。

なぜAWS SAMを選ぶべきか

AWS SAMを選ぶ理由はたくさんありますが、

AWSのネイティブツールである

他のAWSサービスととてもスムーズに連携でき、開発、テスト、デプロイの各ステップで一貫性を保つことができます。

ローカル環境でのテストもバッチリサポート

AWS Lambdaの関数やAPIエンドポイントをローカルでシミュレートできるので、開発者は素早くフィードバックを受け取って、問題を早めに見つけることができます。

準備

  • 前提:AWSアカウントの作成、及びAWS CLIのインストールとCLIでの認証は済ませておいてください。
  • ローカルで実行する場合、Dockerを使用しますので、インストールおよび起動しておいてください。

AWS SAMのインストールとセットアップ

AWS SAM CLIをインストールするには、まず公式ドキュメントに従ってインストーラーをダウンロードします。
主要なプラットフォーム(Windows、macOS、Linux)に対応しており、インストール手順も簡単です。
今回はWindowsにインストールしていきます。

> sam --version
SAM CLI, version 1.134.0

バージョンが表示されれば、SAM CLIを使用してサーバーレスアプリケーションの開発を開始する準備が整います。

基本的なAWS SAMテンプレートの作成

作業用ディレクトリへ移動します。

> cd C:\workspace\project

SAMプロジェクトの作成します。

> sam init

対話形式で行われるので、指示に従って選択していきます。

1.テンプレートの作成方法を選択

用意されているテンプレートか、カスタムで作成するか選択できます。
今回はクイックスタートを使っていきます。
「1 - AWS Quick Start Templates」を選択

2.テンプレートの種類を選択

「1 - Hello World Example」を選択

2.ランタイムとパッケージの選択

おすすめしてくれてるpython3.13とzipで良いので、「y」を入力

3.その他オプション

X-Rayトレースの有効化、CloudWatch Application Insightsを使ったモニタリングの有効化、JSON形式の構造化ログ、今回は必要ないので全部「n」で入力

4.プロジェクト名の入力

入力したプロジェクト名でディレクトリが作成されるので、あらかじめ同じ名前のディレクトリがないことを確認しましょう。

セットアップが完了すると、フォルダ構成が作成されます。

> cd sam-test

ローカルで実行する

サンプルが作成されたら、以下のファイルに実行時に呼ばれる関数(lambda_handler)が定義されているか確認します。

hello_world/app.py

ではローカルPC上で関数を実行してみましょう。

template.yamlから、実行する関数名を確認します。(HelloWorldFunction)

プロジェクトのディレクトリで以下を実行します。

> sam local invoke "HelloWorldFunction"

以下が返ってきたら成功です。

{
    "statusCode": 200,
    "body": "{\"message\": \"Hello, World!\"}"
}

API Gatewayエミュレータを起動

API Gatewayのエミュレータを起動してテストすることもできます。

> sam local start-api

実行するとローカルのimageを利用してコンテナを起動します。
「http://127.0.0.1:3000/」が割り当てられたので、「http://127.0.0.1:3000/hello」にリクエストを投げるとメッセージが返ってきます。

> curl http://127.0.0.1:3000/hello
{"message": "hello world"}

レスポンスがちゃんと返ってきました!

終わりに

AWS SAMを使ってデプロイを行うことも可能です。
SAMテンプレートはCloudFormationの拡張版であり、インフラの設定を簡潔に記述できるようになっています。
AWS SAMでのデプロイについてはまた別の機会にしたいと思います。