Open8

LocalStack使用メモ

tenkohtenkoh

スクラップ記載前提条件

  • ローカルマシンはMac OS
  • 使用言語はGo1.23
  • 本番環境はAWSのS3を使うとして、ローカル開発およびテストにLocalStackのS3を使ってみる
tenkohtenkoh

テスト編

testcontainers-goを使って、使い捨てのコンテナを立ち上げる

tenkohtenkoh

躓いたポイントたち

  • ポート番号が取得できなくてエラーになる
  • コンテナが開始できない場合がある

この辺りは別スクラップに記載してある

tenkohtenkoh

ローカル開発環境編

Docker composeを使って、アプリコンテナ(環境変数とかたくさんあるので)と、LocalStackのコンテナを立ち上げ、アプリ・LocalStack間で通信を行うようにする。

tenkohtenkoh

躓いたポイントたち

  • クレデンシャル関係
  • ローカルエンドポイントURL
tenkohtenkoh

クレデンシャル関係

アプリのコンテナからLocalStackのコンテナに接続するために、ダミーでも良いのでアプリコンテナ内にクレデンシャルなどを設定しておく必要がある。(設定していないとエラーになる)

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION
tenkohtenkoh

ローカルエンドポイント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