概要
Lambdaを利用する時に、S3とdynamo-dbの利用環境は多く、開発でlocal実装をする。
経緯
上記の環境を作成するために、Local-Stackを利用することを考えたがやれることが多く、他の人の学習コストが積む気配があったので、minio(S3の代用)、Dynamodb、Dynamodb-adminを利用してLocalの環境を作成することにした。LambdaまでDockerniseしようとしたが、sam-cliが便利でぬけなかったのと、sam-cliが内部でDockerniseしているためとりあえずあきらめたwwww
TL;DR
すべてdocker-composeに記載してネットワークのHOSTだけ気をつければ普通に動く。
Environmentにまとめておくと楽なので、.envをdocker環境だけ利用する
利用するDockerImage
name | url | desc |
---|---|---|
minio | https://hub.docker.com/r/minio/minio | S3の代用手段 |
dynamodb-local | https://hub.docker.com/r/amazon/dynamodb-local | AWSが提供してくれてるdynamo-dbのLocal環境 |
dynamodb-admin | https://hub.docker.com/r/aaronshaf/dynamodb-admin | dynamo-dbのGUIツール地味にあると嬉しいphpのadmin的なあれ |
outline
- minioの設定を追加
- dynamodb-localの設定を追加
- dynamodb-adminの設定を追加
1. minioの設定を追加
S3の代用となるminioを追加。立ち上がったらGUIで確認できます。
version: "3.8"
services:
s3-local-on-minio:
image: minio/minio
container_name: s3-local
ports:
- "9001:9000"
command: ["--compat", "server", "/data"]
restart: always
env_file:
- .env
environment:
MINIO_ACCESS_KEY: "${AWS_ACCESS_KEY_ID}"
MINIO_SECRET_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_ACCESS_KEY: "${AWS_ACCESS_KEY_ID}"
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}"
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_DEFAULT_REGION: "${AWS_DEFAULT_REGION}"
AWS_S3_ENDPOINT_URL: "${AWS_S3_ENDPOINT_URL}"
AWS_S3_BUCKET_NAME: "${AWS_S3_BUCKET_NAME}"
environmentで利用した情報を作成します。
Keyとかシークレットがかぶっているのは、面倒だったためてを抜きました。(ちゃんと設定してあげてください)
AWS_ACCESS_KEY_ID=dummy_s3_access_key
AWS_SECRET_ACCESS_KEY=dummy_s3_secret_key
AWS_DEFAULT_REGION=us-east-1
AWS_S3_ENDPOINT_URL=http://host.docker.internal:9001/
AWS_S3_BUCKET_NAME=sample
正常に起動できると下記の様なものが見れます。
(localhost:9001)[http://localhost:9001/minio/login]
2. dynamodb-localの設定を追加
Amazonが提供してくれている dynamodb-localを入れていきます。
version: "3.8"
services:
## ここから追記
dynamodb-local:
image: amazon/dynamodb-local
container_name: dynamodb-local
ports:
- "8000:8000"
## ここまで追記
s3-local-on-minio:
image: minio/minio
container_name: s3-local
ports:
- "9001:9000"
command: ["--compat", "server", "/data"]
restart: always
env_file:
- .env
environment:
MINIO_ACCESS_KEY: "${AWS_ACCESS_KEY_ID}"
MINIO_SECRET_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_ACCESS_KEY: "${AWS_ACCESS_KEY_ID}"
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}"
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_DEFAULT_REGION: "${AWS_DEFAULT_REGION}"
AWS_S3_ENDPOINT_URL: "${AWS_S3_ENDPOINT_URL}"
AWS_S3_BUCKET_NAME: "${AWS_S3_BUCKET_NAME}"
dynamodb-adminをかいてから起動した方が個人的に楽なので、そのままadminを記載していきます。
3. dynamodb-adminの設定を追加
version: "3.8"
services:
dynamodb-local:
image: amazon/dynamodb-local
container_name: dynamodb-local
ports:
- "8000:8000"
s3-local-on-minio:
image: minio/minio
container_name: s3-local
ports:
- "9001:9000"
command: ["--compat", "server", "/data"]
restart: always
env_file:
- .env
environment:
MINIO_ACCESS_KEY: "${AWS_ACCESS_KEY_ID}"
MINIO_SECRET_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_ACCESS_KEY: "${AWS_ACCESS_KEY_ID}"
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}"
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_DEFAULT_REGION: "${AWS_DEFAULT_REGION}"
AWS_S3_ENDPOINT_URL: "${AWS_S3_ENDPOINT_URL}"
AWS_S3_BUCKET_NAME: "${AWS_S3_BUCKET_NAME}"
## ここから追記
dynamodb-admin:
container_name: dynamodb-admin
image: aaronshaf/dynamodb-admin:latest
env_file:
- .env
environment:
DYNAMO_ENDPOINT: "${AWS_DYNAMO_DB_URL}"
ports:
- 8001:8001
depends_on:
- dynamodb-local
## ここまで追記
追加で記載したenvの情報も追記
AWS_ACCESS_KEY_ID=dummy_s3_access_key
AWS_SECRET_ACCESS_KEY=dummy_s3_secret_key
AWS_DEFAULT_REGION=us-east-1
AWS_S3_ENDPOINT_URL=http://host.docker.internal:9001/
AWS_S3_BUCKET_NAME=sample
## ここから追記
AWS_DYNAMO_DB_URL=http://host.docker.internal:8000/
AWS_DYNAMO_DB_TABLE=Sample
通信については、host.docker.internalを利用してdockerのcontainer間通信をしてもらいます。(localhostだと動かなかった)
以上を書き終えてdockerを起動します。
$ docker-compose up
成功すると。
localhost:9001にminioと、
localhost:8001にdynamodb-adminが表示されます。