お疲れ様です!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 CLI, version 1.134.0
バージョンが表示されれば、SAM CLIを使用してサーバーレスアプリケーションの開発を開始する準備が整います。
基本的なAWS SAMテンプレートの作成
作業用ディレクトリへ移動します。
SAMプロジェクトの作成します。
対話形式で行われるので、指示に従って選択していきます。
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.プロジェクト名の入力
入力したプロジェクト名でディレクトリが作成されるので、あらかじめ同じ名前のディレクトリがないことを確認しましょう。
セットアップが完了すると、フォルダ構成が作成されます。
ローカルで実行する
サンプルが作成されたら、以下のファイルに実行時に呼ばれる関数(lambda_handler)が定義されているか確認します。
ではローカルPC上で関数を実行してみましょう。
template.yamlから、実行する関数名を確認します。(HelloWorldFunction)
プロジェクトのディレクトリで以下を実行します。
以下が返ってきたら成功です。
"statusCode": 200,
"body": "{\"message\": \"Hello, World!\"}"
}
API Gatewayエミュレータを起動
API Gatewayのエミュレータを起動してテストすることもできます。
実行するとローカルのimageを利用してコンテナを起動します。
「http://127.0.0.1:3000/」が割り当てられたので、「http://127.0.0.1:3000/hello」にリクエストを投げるとメッセージが返ってきます。
{"message": "hello world"}
レスポンスがちゃんと返ってきました!
終わりに
AWS SAMを使ってデプロイを行うことも可能です。
SAMテンプレートはCloudFormationの拡張版であり、インフラの設定を簡潔に記述できるようになっています。
AWS SAMでのデプロイについてはまた別の機会にしたいと思います。