【Docker】docker-composeでlocalstackのコンテナを立てる

開発環境で実際のAWSと接続したくない!!そんな要望あると思います。

そんな時にAWSエミュレーター「localstack」が使えます。

今回はdocker-composeでlocalstackのコンテナを立てて、S3サービスのエミュレーターとして使用してみたいと思います。

環境情報

OS: Windows10 64bit
docker: v20.10.2
localstack: v0.12.6
AWS CLI: v2.1.24

localstackの対応サービス

無料版と有料版がありますが、無料版でも対応しているAWSサービスが多いので十分使えるツールです。

使用できるAWSサービスは公式githubを参照してください。

docker-composeでlocalstackのコンテナを立てる

任意のディレクトリでdocker-compose.ymlを作成し、以下のように記載してください。SERVICESには使用したいサービス名をカンマ区切りで設定することで複数サービス使用できます。

version: '3'

services:
  # LocalStack
  localstack:
    image: localstack/localstack:latest
    environment:
      - SERVICES=s3 # 使いたいAWSサービスカンマ区切りで設定する
      - DEFAULT_REGION=ap-northeast-1 # リージョンを設定
      - DATA_DIR=/tmp/localstack/data # データ保存するディレクトリ
    volumes:
      - ./localstack:/tmp/localstack # ローカルディレクトリをデータ保存ディレクトリへマウント
    ports:
      - 4566:4566 # サービスへのアクセスポートは4566

コンテナを起動する

以下のコマンドでdocker-composeを起動するとポート4566でコンテナが起動するはずです。

※docker-compose.ymlが配置されているディレクトリで実行すること

docker-compose up -d

初回はイメージを作成するのに少し時間がかかりますが、気長に待ちましょう。

動作確認する

今回はAWS CLIを使用して接続できるかdocker-composeのlocalstackに接続できるか確認します。

ダミーのAWS CLIコンフィグを作成

localstackに接続する際はIDやKeyは仮のもので大丈夫です。以下でダミーのaws configをプロファイル名dummyで作成します。

$ aws configure --profile dummy
// 対話で設定を聞かれるので以下のように設定
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: ap-northeast-1
Default output format [None]: None

バケットを作成する

以下のコマンドでlocalstack内にバケットを作成します。

aws s3 mb s3://sample-bucket --endpoint-url=http://localhost:4566 --profile dummy

バケットが存在するか確認する

以下のコマンドでバケット一覧を確認できます。先程作成したバケットが表示されればOKです。

aws s3 ls --endpoint-url=http://localhost:4566 --profile dummy

これでlocalstackがS3エミュレーターとして使用できることが確認できたのでここまで!あとは開発環境でアプリから接続するなりしましょう!!

参考

https://github.com/localstack/localstack

https://wand-ta.hatenablog.com/entry/2019/03/10/215639