AWS Lambda + API GW + DynamoDB — 50+ コマンドを 6 カテゴリで
サーバレス三種の神器(Lambda / API Gateway / DynamoDB)は IaC で管理する前提でも、CLI で確認・診断・即応する場面が多々あります。 Console を行ったり来たりするより速い操作を整理。
目次
- Lambda 関数管理
- Lambda 実行・ログ確認
- API Gateway HTTP API (apigatewayv2)
- API Gateway REST API (apigateway)
- DynamoDB 基本操作 (get/put/query/scan)
- DynamoDB テーブル設定 (PITR / TTL / Stream)
- 運用レシピ
- 用語集
1. Lambda 関数管理
# 一覧
aws lambda list-functions
aws lambda list-functions --query 'Functions[].FunctionName' --output text
aws lambda get-function --function-name myfn
aws lambda get-function-configuration --function-name myfn
# 作成
zip -j fn.zip index.mjs
aws lambda create-function \
--function-name myfn \
--runtime nodejs22.x \
--architectures arm64 \
--memory-size 256 \
--timeout 10 \
--role arn:aws:iam::xxx:role/lambda-exec \
--handler index.handler \
--zip-file fileb://fn.zip \
--environment 'Variables={LOG_LEVEL=info}'
# コード更新
aws lambda update-function-code --function-name myfn --zip-file fileb://fn.zip
aws lambda update-function-code --function-name myfn --s3-bucket b --s3-key fn.zip
# 設定更新
aws lambda update-function-configuration --function-name myfn \
--memory-size 512 --timeout 15 \
--environment 'Variables={LOG_LEVEL=debug,API_URL=https://...}'
# Permission(Resource Policy)— API GW から呼べるように
aws lambda add-permission --function-name myfn \
--statement-id apigw-invoke \
--action lambda:InvokeFunction \
--principal apigateway.amazonaws.com \
--source-arn 'arn:aws:execute-api:ap-northeast-1:xxx:apixxx/*/*/path'
aws lambda get-policy --function-name myfn
aws lambda remove-permission --function-name myfn --statement-id apigw-invoke
# Alias / Version
aws lambda publish-version --function-name myfn
aws lambda list-versions-by-function --function-name myfn
aws lambda create-alias --function-name myfn --name prod --function-version 5
aws lambda update-alias --function-name myfn --name prod --function-version 6
aws lambda list-aliases --function-name myfn
# 削除
aws lambda delete-function --function-name myfn
2. Lambda 実行・ログ確認
# 同期実行
aws lambda invoke --function-name myfn \
--payload '{"key":"value"}' \
--cli-binary-format raw-in-base64-out \
out.json
cat out.json
# 非同期 (Event)
aws lambda invoke --function-name myfn --invocation-type Event \
--payload '{"x":1}' --cli-binary-format raw-in-base64-out out.json
# DryRun (権限チェックのみ)
aws lambda invoke --function-name myfn --invocation-type DryRun out.json
# RequestResponse でレスポンス本体を表示
aws lambda invoke --function-name myfn \
--payload '{}' --cli-binary-format raw-in-base64-out /dev/stdout
# ログを tail
aws logs tail /aws/lambda/myfn --follow
aws logs tail /aws/lambda/myfn --since 10m
aws logs tail /aws/lambda/myfn --filter-pattern 'ERROR'
aws logs tail /aws/lambda/myfn --format short
# 同時実行数
aws lambda put-function-concurrency --function-name myfn --reserved-concurrent-executions 10
aws lambda delete-function-concurrency --function-name myfn
# Provisioned Concurrency(コールドスタート対策)
aws lambda put-provisioned-concurrency-config \
--function-name myfn --qualifier prod --provisioned-concurrent-executions 5
3. API Gateway HTTP API (apigatewayv2)
新しい HTTP API(v2)。REST API より高速・安価で多くのケースで第一選択。
# API 一覧 / 詳細
aws apigatewayv2 get-apis
aws apigatewayv2 get-api --api-id xxx
# API 作成(Lambda Proxy)
aws apigatewayv2 create-api --name my-api --protocol-type HTTP \
--target arn:aws:lambda:ap-northeast-1:xxx:function:myfn
# Route / Integration / Stage
aws apigatewayv2 get-routes --api-id xxx
aws apigatewayv2 get-integrations --api-id xxx
aws apigatewayv2 get-stages --api-id xxx
# Route 追加
aws apigatewayv2 create-integration --api-id xxx \
--integration-type AWS_PROXY --integration-uri 'arn:aws:lambda:...:function:myfn' \
--payload-format-version 2.0
aws apigatewayv2 create-route --api-id xxx \
--route-key 'POST /contact' --target 'integrations/<integrationId>'
# Stage ($default が標準)
aws apigatewayv2 create-stage --api-id xxx --stage-name v1 --auto-deploy
# CORS
aws apigatewayv2 update-api --api-id xxx \
--cors-configuration 'AllowOrigins=https://lab.iigtn.com,AllowMethods=GET,POST,OPTIONS,AllowHeaders=Content-Type'
# 削除
aws apigatewayv2 delete-api --api-id xxx
4. API Gateway REST API (apigateway)
# 一覧
aws apigateway get-rest-apis
aws apigateway get-resources --rest-api-id xxx
aws apigateway get-stages --rest-api-id xxx
# Stage / Deployment
aws apigateway create-deployment --rest-api-id xxx --stage-name v1
aws apigateway delete-stage --rest-api-id xxx --stage-name v1
# Usage Plan / API Key
aws apigateway get-usage-plans
aws apigateway get-api-keys
aws apigateway create-api-key --name my-key --enabled
aws apigateway create-usage-plan-key --usage-plan-id up-xxx \
--key-id key-xxx --key-type API_KEY
# テスト呼び出し
aws apigateway test-invoke-method --rest-api-id xxx \
--resource-id rsrc-xxx --http-method GET
5. DynamoDB 基本操作
# テーブル一覧
aws dynamodb list-tables
aws dynamodb describe-table --table-name users
# 単一 item 取得
aws dynamodb get-item --table-name users \
--key '{"id":{"S":"u1"}}'
# 書き込み
aws dynamodb put-item --table-name users \
--item '{"id":{"S":"u1"},"name":{"S":"alice"},"score":{"N":"92"}}'
# 上書き保護(item が存在する時だけ更新)
aws dynamodb put-item --table-name users \
--item '{"id":{"S":"u1"},"name":{"S":"alice2"}}' \
--condition-expression 'attribute_exists(id)'
# 削除
aws dynamodb delete-item --table-name users --key '{"id":{"S":"u1"}}'
# Update(部分更新)
aws dynamodb update-item --table-name users \
--key '{"id":{"S":"u1"}}' \
--update-expression 'SET score = :s, updated_at = :t' \
--expression-attribute-values '{":s":{"N":"95"},":t":{"S":"2026-04-26T00:00:00Z"}}'
# Query(PK + 条件)
aws dynamodb query --table-name orders \
--key-condition-expression 'user_id = :u AND order_date >= :d' \
--expression-attribute-values '{":u":{"S":"u1"},":d":{"S":"2026-04-01"}}'
# Scan(全走査、本番は基本避ける)
aws dynamodb scan --table-name users
aws dynamodb scan --table-name users --limit 100
aws dynamodb scan --table-name users \
--filter-expression 'score > :s' \
--expression-attribute-values '{":s":{"N":"80"}}'
# BatchGet / BatchWrite(25 件/req)
aws dynamodb batch-get-item --request-items '{
"users":{"Keys":[{"id":{"S":"u1"}},{"id":{"S":"u2"}}]}
}'
aws dynamodb batch-write-item --request-items '{
"users":[
{"PutRequest":{"Item":{"id":{"S":"u3"},"name":{"S":"carol"}}}},
{"DeleteRequest":{"Key":{"id":{"S":"u4"}}}}
]
}'
# Transactions(最大 100 件、ACID)
aws dynamodb transact-write-items --transact-items '[
{"Put":{"TableName":"orders","Item":{"id":{"S":"o1"}}}},
{"Update":{"TableName":"users","Key":{"id":{"S":"u1"}},
"UpdateExpression":"SET order_count = if_not_exists(order_count, :z) + :i",
"ExpressionAttributeValues":{":z":{"N":"0"},":i":{"N":"1"}}}}
]'
6. DynamoDB テーブル設定
# テーブル作成(On-Demand)
aws dynamodb create-table --table-name users \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
# Provisioned + GSI
aws dynamodb create-table --table-name orders \
--attribute-definitions \
AttributeName=order_id,AttributeType=S \
AttributeName=user_id,AttributeType=S \
AttributeName=order_date,AttributeType=S \
--key-schema AttributeName=order_id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST \
--global-secondary-indexes '[{
"IndexName":"user-date-index",
"KeySchema":[
{"AttributeName":"user_id","KeyType":"HASH"},
{"AttributeName":"order_date","KeyType":"RANGE"}
],
"Projection":{"ProjectionType":"ALL"}
}]'
# PITR 有効化(誤削除復旧)
aws dynamodb update-continuous-backups --table-name users \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
# TTL 有効化
aws dynamodb update-time-to-live --table-name sessions \
--time-to-live-specification 'Enabled=true,AttributeName=expires_at'
# Stream 有効化
aws dynamodb update-table --table-name users \
--stream-specification 'StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES'
# バックアップ
aws dynamodb create-backup --table-name users --backup-name users-2026-04-26
aws dynamodb list-backups --table-name users
aws dynamodb restore-table-from-backup --target-table-name users-restored \
--backup-arn arn:...
# 削除
aws dynamodb delete-table --table-name users
運用レシピ
レシピ 1 — Lambda の最近のエラーをサクッと確認
aws logs tail /aws/lambda/myfn --since 1h --filter-pattern 'ERROR'
レシピ 2 — API GW の URL を取得
API_ID=$(aws apigatewayv2 get-apis --query 'Items[?Name==`my-api`].ApiId | [0]' --output text)
echo "https://${API_ID}.execute-api.ap-northeast-1.amazonaws.com/"
レシピ 3 — DynamoDB を JSON でダンプ → 別テーブルに移行
# scan で全件取得
aws dynamodb scan --table-name old --output json > dump.json
# jq で BatchWrite 形式に整形
jq -c '.Items[] | {PutRequest:{Item:.}}' dump.json > items.ndjson
# 25 件ずつバッチ書込
split -l 25 items.ndjson chunk_
for f in chunk_*; do
echo "{\"new-table\":[" > req.json
paste -sd, $f >> req.json
echo "]}" >> req.json
aws dynamodb batch-write-item --request-items file://req.json
done
レシピ 4 — Lambda の memory / timeout を一括調整
for fn in $(aws lambda list-functions --query 'Functions[].FunctionName' --output text); do
aws lambda update-function-configuration --function-name $fn \
--memory-size 256 --timeout 10
done
レシピ 5 — API GW の slow request 抽出
# Access logging を CloudWatch に出している前提
aws logs filter-log-events --log-group-name '/aws/apigateway/my-api/v1' \
--filter-pattern '{ $.responseLatency > 3000 }' \
--start-time $(date -d '1 hour ago' +%s)000 \
| jq -r '.events[].message' | jq
コマンド早見表
# Lambda
aws lambda invoke --function-name F --payload '{}' --cli-binary-format raw-in-base64-out out.json
aws logs tail /aws/lambda/F --follow
aws lambda update-function-code --function-name F --zip-file fileb://fn.zip
aws lambda update-function-configuration --function-name F --memory-size 512
# API GW (HTTP)
aws apigatewayv2 get-apis
aws apigatewayv2 get-routes --api-id A
aws apigatewayv2 update-api --api-id A --cors-configuration ...
# DynamoDB
aws dynamodb get-item --table-name T --key '{...}'
aws dynamodb put-item --table-name T --item '{...}'
aws dynamodb query --table-name T --key-condition-expression 'pk = :p'
aws dynamodb update-continuous-backups --table-name T --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
用語集
- Lambda
- 関数を呼び出された時だけ実行するサーバレス実行環境。Node.js/Python/Java/Go 等。arm64 (Graviton) で安価。
- Cold Start
- Lambda コンテナの初回起動オーバーヘッド。Provisioned Concurrency で回避できるが追加料金。
- Lambda Alias / Version
- Version = イミュータブルなコードスナップショット、Alias = それを指す可変ポインタ(例: prod → version 5)。Blue/Green デプロイに使う。
- Resource Policy (Lambda Permission)
- 「誰が この Lambda を呼べるか」のポリシー。API GW などからのトリガ設定で必要。
- API Gateway HTTP API (v2)
- 新型の API GW。REST API より高速・安価。OAuth2/JWT、CORS、自動デプロイなどモダン機能を持つ。
- Lambda Proxy 統合 (payload v2)
- HTTP API → Lambda の統合方式。リクエスト全体を Event として渡し、レスポンスをそのまま HTTP レスポンスにする。
- DynamoDB
- AWS のフルマネージド NoSQL。PK/SK 設計、On-Demand vs Provisioned 課金、PITR / Stream / TTL 等。
- PK / SK / GSI / LSI
- Partition Key / Sort Key / Global Secondary Index / Local Secondary Index。クエリパターンに合わせて設計。
- Query vs Scan
- Query = PK 指定で効率的。Scan = 全走査で重い。本番では Query 一択 + 必要な GSI を準備する。
- PITR (Point-in-Time Recovery)
- 過去 35 日間の任意時点に復旧できるバックアップ機能。誤削除復旧の最後の砦。
- TTL
- 属性に設定した UNIX タイムスタンプを過ぎた item を自動削除する機能。セッションキャッシュ等に。
- DynamoDB Stream
- テーブル変更を順次配信するイベントソース。Lambda トリガで cross-table 整合性や監査ログに利用。
- BatchGet / BatchWrite / Transact
- BatchGet = 100 件 / 16MB まで、BatchWrite = 25 件まで(部分失敗あり)、Transact = 100 件 ACID 保証(部分失敗なし)。
- Conditional Write
- condition-expression で「ある条件を満たす場合のみ書き込む」操作。楽観的ロック実装の基本。
- Provisioned Concurrency
- Lambda の指定数を常時起動状態に保つ機能。Cold Start を消せるが追加料金。レイテンシ重視の本番のみ使う。