[PHP] Symfony で REST API を作り Lambda へデプロイする
2026-09-27
Symfony で REST API を作り AWS Lambda でホストしました。 簡単なメモ帳アプリです。データは DynamoDB へ保存します。
構成
Lambda DynamoDB
Lambda は関数URLを有効化します。 クライアントから関数URLを呼ぶと、Lambda が起動して、 Symfony へリクエストが流れて DynamoDB へ接続する。という具合です。
コード
</>
メモ
Controller
MapQueryParameter にてクエリパラメータをマッピングします
DTO。リクエストボディをマッピングします。またレスポンスボディの構築にもDTOを使います
Repository。DynamoDB へデータを保存するため Doctrine ORM は使いません
SAM のテンプレート。DynamoDB テーブルと Lambda 関数を作成します
ローカル開発用のスクリプト。DynamoDB Local へテーブルを作成します
デプロイ
AWS SAM CLI にてデプロイしました。 Lambda 関数や DynamoDB テーブルを構築します。※template.yamlへ記載
sam build
sam deploy --guided
コマンドを実行すると、 Lambda 関数が作成されました。
関数URLが有効化されてます。
動作確認
関数URLを curl で叩きます。
# 作成
curl -X POST 'https://xxx.on.aws/memos' --json '{"title":"aaa","description":"aaa aaa"}'
# 一覧
curl 'https://xxx.on.aws/memos'
# 一覧(キーワード検索)
curl 'https://xxx.on.aws/memos?q=aaa'
# 詳細
curl 'https://xxx.on.aws/memos/<id>'
# 更新
curl -X PUT 'https://xxx.on.aws/memos/<id>' --json '{"title":"aaa","description":"ccc ccc"}'
# 削除
curl -X DELETE 'https://xxx.on.aws/memos/<id>'
ローカル開発
docker compose でローカル開発します。 DynamoDB のエミュレータとして DynamoDB Local を立ち上げます。
# コンテナを立ち上げ
docker compose up
# DynamoDB Local のセットアップ
docker compose exec app composer run setup:local
docker-compose.yml
</>
services:
app:
build:
context: .
dockerfile: Dockerfile
target: local
volumes:
- .:/var/www/html
ports:
- 8000:8080
environment:
- AWS_ENDPOINT_URL_DYNAMODB=http://dynamodb-local:8000
- AWS_REGION=ap-northeast-1
- DYNAMODB_TABLE=memos
- AWS_ACCESS_KEY_ID=local
- AWS_SECRET_ACCESS_KEY=local
depends_on:
- dynamodb-local
# see https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html
dynamodb-local:
image: amazon/dynamodb-local:latest
command: ["-jar", "DynamoDBLocal.jar", "-inMemory", "-sharedDb"]
ports:
- 8001:8000
dynamodb-admin:
image: aaronshaf/dynamodb-admin:latest
environment:
- DYNAMO_ENDPOINT=http://dynamodb-local:8000
- AWS_REGION=ap-northeast-1
- AWS_ACCESS_KEY_ID=local
- AWS_SECRET_ACCESS_KEY=local
ports:
- 8002:8001
depends_on:
- dynamodb-local
なお SAM CLI を使っているので、SAM Local にてローカル開発する手もあります。 が DynamoDB Local への接続にめんどくささを感じたため、あえて使わずに docker compose で開発しました。
おわり
感想 ・コールドスタートあるのでなんとかしたいが.. ・データ量が少ないという前提で DynamoDB のテーブル設計をした。 その前提であれば、案外雑にテーブル設計してもいいんじゃないかと思えてきた。