Open8
LocalStack使用メモ
スクラップ記載前提条件
- ローカルマシンはMac OS
- 使用言語はGo1.23
- 本番環境はAWSのS3を使うとして、ローカル開発およびテストにLocalStackのS3を使ってみる
テスト編
testcontainers-go
を使って、使い捨てのコンテナを立ち上げる
ローカル開発環境編
Docker composeを使って、アプリコンテナ(環境変数とかたくさんあるので)と、LocalStackのコンテナを立ち上げ、アプリ・LocalStack間で通信を行うようにする。
躓いたポイントたち
- クレデンシャル関係
- ローカルエンドポイントURL
クレデンシャル関係
アプリのコンテナからLocalStackのコンテナに接続するために、ダミーでも良いのでアプリコンテナ内にクレデンシャルなどを設定しておく必要がある。(設定していないとエラーになる)
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_REGION
ローカルエンドポイントURL
アプリコンテナ内で以下のように*s3.Client
を設定するとき、うっかりlocalhost
をエンドポイントに指定しないこと。LocalStackコンテナ向きにしないといけないので、以下のようにcompose.ymlを書きつつ、http://localstack:4566
をエンドポイントとして指定する。
cfg.S3Client = s3.NewFromConfig(awsCfg, func(o *s3.Options) {
o.UsePathStyle = true
o.BaseEndpoint = aws.String(os.Getenv("APP_LOCAL_S3_ENDPOINT"))
})
compose.yml
services:
localstack:
image: localstack/localstack:s3-latest
container_name: localstack
ports:
- "4566:4566"
networks:
- app-network
api:
environment:
- APP_LOCAL_S3_ENDPOINT=http://localstack:4566
networks:
- app-network
depends_on:
- localstack
networks:
app-network:
driver: bridge