はじめに
AWS Serverless Application Model (SAM) は、サーバーレスアプリケーションを構築するためのオープンソースフレームワークです。本記事では、AWS SAM CLI の主要コマンドとその実用的な使い方を、特に SaaS 開発と自動化を重視する視点から詳細に解説します。
1. プロジェクト初期化
sam init
新しいサーバーレスアプリケーションプロジェクトを作成します。
基本構文:
sam init
実用的なオプション:
# インタラクティブモードをスキップして直接Pythonプロジェクトを作成
sam init --runtime python3.9 --dependency-manager pip --app-template hello-world --name my-python-app
# Node.jsプロジェクトをTypeScriptで作成
sam init --runtime nodejs20.x --dependency-manager npm --app-template hello-world-typescript --name my-typescript-app
# 特定のテンプレートからプロジェクトを作成
sam init --location gh:aws-samples/cookiecutter-aws-sam-python
効率化のためのカスタムテンプレート作成:
よく使うプロジェクト構成を自分でテンプレート化しておくことで初期化を高速化できます。
# カスタムテンプレートを使用
sam init --location /path/to/your/custom/template
2. ローカル開発
sam local start-api
API Gateway + Lambda の構成をローカルで実行します。
基本構文:
sam local start-api
実用的なオプション:
# 特定のポートで起動
sam local start-api --port 8080
# 環境変数を.envファイルから読み込む
sam local start-api --env-vars env.json
# ホットリロードを有効化(コード変更を検知して自動再起動)
sam local start-api --warm-containers EAGER
env.json の例:
{
"Function1": {
"DB_CONNECTION_STRING": "postgresql://user:pass@localhost:5432/db",
"API_KEY": "local-development-key"
}
}
sam local invoke
Lambda 関数を単体で実行します。
基本構文:
sam local invoke FunctionName
実用的なオプション:
# イベントデータをJSONファイルから読み込む
sam local invoke --event events/event.json MyFunction
# 環境変数を設定
sam local invoke --env-vars env.json MyFunction
# デバッグモードでLambda関数を実行
sam local invoke --debug-port 5858 MyFunction
sam local start-lambda
Lambda 関数をローカルで起動し、AWS CLI や SDK からアクセス可能にします。
基本構文:
sam local start-lambda
実用的なオプション:
# AWS CLIからローカルLambdaを呼び出す例
aws lambda invoke --function-name "MyFunction" \
--endpoint-url "http://127.0.0.1:3001" \
--no-verify-ssl \
output.txt
3. デプロイ関連
sam build
SAM テンプレートをビルドし、デプロイ可能なパッケージを作成します。
基本構文:
sam build
実用的なオプション:
# 特定の関数のみビルド
sam build FunctionName
# Docker使用してビルド(依存関係の互換性確保)
sam build --use-container
# パラレルビルドを有効化(大規模プロジェクト向け)
sam build --parallel
# キャッシュ使用(ビルド高速化)
sam build --cached
sam package
アプリケーションをパッケージ化して S3 にアップロードします。
基本構文:
sam package --output-template-file packaged.yaml --s3-bucket my-bucket
実効化オプション:
# S3プレフィックスを指定
sam package --s3-prefix my-prefix
# KMSキーを使用して暗号化
sam package --kms-key-id your-kms-key-id
sam deploy
アプリケーションを AWS にデプロイします。
基本構文:
sam deploy --template-file packaged.yaml --stack-name my-stack --capabilities CAPABILITY_IAM
実用的なオプション:
# ガイド付きデプロイ(インタラクティブモード)
sam deploy --guided
# パラメータ指定
sam deploy --parameter-overrides ParameterKey=KeyName,ParameterValue=Value
# 変更セットを作成するが適用しない
sam deploy --no-execute-changeset
# タグを付与
sam deploy --tags "Project=MyProject" "Environment=Dev"
# スタック失敗時の動作を指定
sam deploy --fail-on-empty-changeset --no-confirm-changeset
sam sync
開発中の迅速な反復処理のためのコマンド(ビルド、パッケージ、デプロイを1ステップで)。
基本構文:
sam sync
実用的なオプション:
# ファイル変更を監視して自動デプロイ
sam sync --watch
# コード変更のみをデプロイ(インフラ変更なし)
sam sync --code
# スタック名を指定
sam sync --stack-name my-stack
4. テストとデバッグ
sam validate
SAM テンプレートの検証を行います。
基本構文:
sam validate
実用的なオプション:
# 特定のテンプレートファイルを検証
sam validate --template template.yaml
# 詳細な出力
sam validate --debug
sam logs
Lambda 関数のログを表示します。
基本構文:
sam logs -n FunctionName
実用的なオプション:
# ログをリアルタイムで追跡(tail)
sam logs -n FunctionName --tail
# 特定の時間からのログを表示
sam logs -n FunctionName --start-time '10min ago'
# 特定のフィルターパターンでログをフィルタリング
sam logs -n FunctionName --filter "ERROR"
5. リソース管理
sam list
デプロイされたリソースの一覧を表示します。
基本構文:
sam list resources --stack-name my-stack
実用的なオプション:
# エンドポイントの一覧表示
sam list endpoints --stack-name my-stack
# Lambda関数の一覧表示
sam list resources --stack-name my-stack --output json
sam delete
スタックを削除します。
基本構文:
sam delete --stack-name my-stack
実用的なオプション:
# 確認プロンプトなしで削除
sam delete --stack-name my-stack --no-prompts
# S3バケットの内容も削除
sam delete --stack-name my-stack --s3-bucket my-bucket --s3-prefix my-prefix
6. 高度な使用方法
カスタムレイヤーの活用
Lambda レイヤーを使用すると、共通コードを複数の関数で再利用できます。
# レイヤーをパッケージ化
sam build MyLayer
# レイヤーを含めてデプロイ
sam deploy
AWS SAM CLI プラグイン
SAM CLI の機能を拡張するプラグインを管理します。
# プラグイン一覧表示
sam plugin list
# プラグインインストール
sam plugin install example-plugin
Nested スタックの活用
複雑なアプリケーションを管理しやすいコンポーネントに分割できます。
Resources:
NestedStack:
Type: AWS::Serverless::Application
Properties:
Location: nested-stack.yaml
7. CI/CD パイプライン連携
GitHub Actions との連携例
name: Deploy SAM Application
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup AWS SAM CLI
uses: aws-actions/setup-sam@v1
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Build SAM Application
run: sam build --cached
- name: Deploy SAM Application
run: |
sam deploy --stack-name prod-stack \
--no-confirm-changeset \
--no-fail-on-empty-changeset \
--parameter-overrides Environment=production
効率化のためのコマンドエイリアス設定
.bashrc
や .zshrc
に以下を追加することで、頻繁に使用するコマンドを短縮できます。
# SAM開発用エイリアス
alias sb="sam build --cached"
alias sd="sam deploy --no-confirm-changeset"
alias sapi="sam local start-api --warm-containers EAGER"
alias slogs="sam logs --tail"
alias sdev="sam sync --watch --stack-name dev-stack"
まとめ
AWS SAM CLI は、サーバーレスアプリケーションの開発ライフサイクル全体をサポートする強力なツールです。特に自動化とテンプレート化を重視する開発者にとって、これらのコマンドを効率的に使いこなすことで、開発の効率化とデプロイの信頼性向上が実現できます。
本記事で紹介したコマンドとオプションを活用し、AWS SAM による迅速なサーバーレス開発を実現してください。
コメント