サーバレス環境構築メモ

0) 事前前提

template.yamlCodeUri 版ProjectsFunctionCodeUri: src/projects, Handler: index.handler

Docker Desktop / AWS CLI / SAM CLI / Python3.12 インストール済み

1) DynamoDB Local を“同ネット&永続化”で起動(毎回コレで安定)

docker network create sam-local 2>$null; docker rm -f ddb 2>$null; $p=(Get-Location).Path; docker run -d --name ddb --network sam-local -p 8000:8000 -v "$p\.ddb:/home/dynamodblocal/data" amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb -dbPath /home/dynamodblocal/data; docker ps -f name=ddb

2) テーブル作成(テンプレ準拠 / PAY_PER_REQUEST / GSIあり)

Set-Content -Path gsi.json -Value '[{"IndexName":"OwnerUpdated","KeySchema":[{"AttributeName":"ownerSub","KeyType":"HASH"},{"AttributeName":"updatedAt","KeyType":"RANGE"}],"Projection":{"ProjectionType":"ALL"}}]'; aws dynamodb create-table --endpoint-url http://localhost:8000 --table-name easyclip-projects-v1 --billing-mode PAY_PER_REQUEST --attribute-definitions AttributeName=projectId,AttributeType=S AttributeName=ownerSub,AttributeType=S AttributeName=updatedAt,AttributeType=S --key-schema AttributeName=projectId,KeyType=HASH --global-secondary-indexes file://gsi.json

確認(できてるか)

aws dynamodb list-tables --endpoint-url http://localhost:8000; aws dynamodb describe-table --endpoint-url http://localhost:8000 --table-name easyclip-projects-v1 --query 'Table.GlobalSecondaryIndexes[].IndexName'

3) env.json(Lambda → DDB を“コンテナ名”で参照)

Set-Content -Path env.json -Value '{ "ProjectsFunction": { "DDB_ENDPOINT": "http://ddb:8000", "PROJECTS_TABLE": "easyclip-projects-v1" } }'

4) SAM Local をビルド&起動(Python3.12 指定+同ネット)

$env:SAM_CLI_PYTHON=(py -3.12 -c "import sys;print(sys.executable)"); sam build; sam local start-api --env-vars env.json --docker-network sam-local

5) API 動作確認(ローカルは /v1 なし)

一覧

Invoke-RestMethod -Uri 'http://127.0.0.1:3000/projects' | ConvertTo-Json -Depth 5

6) もし異常時(原因を一撃表示するデバッグ)

Set-Content -Path event.json -Value '{ "resource":"/projects","path":"/projects","httpMethod":"GET","requestContext":{"authorizer":{"claims":{"sub":"anon"}}} }'; sam local invoke ProjectsFunction --env-vars env.json --event event.json --docker-network sam-local

EndpointConnectionErrorDDB_ENDPOINT 到達不可(同ネット&http://ddb:8000 を再確認)

ResourceNotFoundExceptionテーブル未作成/名前不一致

KeyError: 'PROJECTS_TABLE'env.json の関数名キーがズレてる

コメント

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