PR

AWS SAM コマンド完全ガイド:効率的なサーバーレス開発のために

はじめに

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 による迅速なサーバーレス開発を実現してください。

コメント

タイトルとURLをコピーしました