はじめに
サーバーレスアプリケーションの開発を簡単にしてくれる AWS SAM(Serverless Application Model)。
この記事では、Mac 上(Appleシリコン)で AWS SAM CLI をインストールし、Hello World アプリケーションを AWS にデプロイするまでの流れをまとめます。
内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです。
AWS SAM(Serverless Application Model)とは?
AWS Serverless Application Model (AWS SAM) は、Infrastructure as Code (IaC) を使用してサーバーレスアプリケーションを構築するためのオープンソースフレームワークです。
CloudFormation をベースにしており、Lambda 関数、API Gateway、DynamoDB、S3 などのリソースを簡単な構文で定義できるのが特徴です!
sam
コマンドを使うことで、ローカル開発・シミュレーション・クラウドへのデプロイを一貫して行うことができます(とても便利で感動しました!)。
参考文献
書こうと思ったきっかけ
以前からSAMにめちゃくちゃ興味があり、実際に手を動かして検証してみたいと思っていました。サーバーレス構成やデプロイフローの理解を深めたかったこともあり、簡単な検証の記録として残していきます...!
こんな感じの検証内容です
■ 前提条件
以下のツールがインストール済みであること:
- AWS CLI(aws configure 設定済み)
AWS CLIの設定がまだの方は、参考にしてみてください!
- Docker(docker -v)
- AWS SAM CLI(sam --version)
■ AWS SAM CLI のインストール手順(Apple シリコンの場合)
参考手順
公式から .pkg をダウンロード
aws-sam-cli-macos-arm64.pkg
ダウンロードできました!
以下のコマンドでインストール
sudo installer -pkg ~/Downloads/aws-sam-cli-macos-arm64.pkg -target /
インストールできました!
インストール確認
which sam
# /usr/local/bin/sam と出れば OK
sam --version
# SAM CLI, x.xx.x
こんな感じです...!
実際にやってみた
ここからは、以下のチュートリアルを参考にしながら進めていきます!
参考文献
■ ステップ 1:サンプルの Hello World アプリケーションを初期化
sam init
プロンプトへの回答例:
Which template source would you like to use?
→ 1 (AWS Quick Start Templates)
Choose an AWS Quick Start application template
→ 1 (Hello World Example)
Use the most popular runtime and package type? (Python and zip) [y/N]:
→ y
Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:
→ ENTER
Would you like to enable monitoring using CloudWatch Application Insights? [y/N]:
→ ENTER
Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]:
→ ENTER
Project name [sam-app]:
→ ENTER(もしくは任意の名前)
対話形式で簡単にできました!
作成後:
cd sam-app
tree # ← なければ `brew install tree`
■ ステップ 2:アプリケーションを構築
sam build
AWS SAM ビルドエラー発生
AWS SAM CLI は template.yaml
に記述された Runtime: python3.13
に従ってビルドしようとしたが、ローカルに Python 3.13 がインストールされておらず PATH にも存在しなかったため、バイナリ検証が失敗しました。
実際のエラー画面
Build Failed
Error: PythonPipBuilder:Validation - Binary validation failed for python, searched for python in following locations :
['/usr/local/bin/python', '/Library/Frameworks/Python.framework/Versions/3.12/bin/python3', '/usr/local/bin/python3', '/usr/bin/python3']
which did not satisfy constraints for runtime: python3.13. Do you have python for runtime: python3.13 on your PATH?
私の環境での修正方法
template.yaml
のランタイム変更
template.yaml:
Runtime: python3.13 → ご自身のバージョンに変更
再度、アプリケーションを構築
sam build
問題なくビルドされました!
■ ステップ 3:アプリケーションを AWS にデプロイ
sam deploy --guided
プロンプトへの回答例:
Stack Name [sam-app]: ENTER
AWS Region [us-west-2]: ap-northeast-1(または任意)
Confirm changes before deploy [Y/n]: n
Allow SAM CLI IAM role creation [Y/n]: ENTER
Disable rollback [y/N]: ENTER
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: ENTER
SAM configuration file [samconfig.toml]: ENTER
SAM configuration environment [default]: ENTER
作成後の画面
マネコン上でも問題なく作成されていることが確認できました!
■ ステップ 4:デプロイ済みアプリケーションの呼び出し
出力の Outputs セクションにある HelloWorldApi を確認。
例:
curl https://xxx.ap-northeast-1.amazonaws.com/Prod/hello/
# 出力:{"message": "hello world"}
ブラウザからも問題なくアクセスできました!
■ ステップ 5(任意):ローカルでテスト
sam local invoke HelloWorldFunction
sam local start-api
# → http://127.0.0.1:3000/hello にアクセス
ローカルでも問題なくアクセスできることが確認できました!
■ ステップ 6:アプリケーションを削除
aws cloudformation delete-stack --stack-name sam-app
こちらもいい感じに削除されました!
まとめ
ここまで読んでいただき、ありがとうございました!
AWS SAM CLI を使えば、ローカルでの開発・テスト・クラウドへのデプロイまでがスムーズに行えました。
ビルドや sam local start-api
による API シミュレーションも便利で、Lambda+API Gateway の構成を簡単に試せる点が非常に魅力的でした...!
今後は API Gateway に認証を追加したり、DynamoDB との連携も試してみたいと思います!!