この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
AWSを利用したロジックのテストにlocalstackを使おうと試していましたが、MacOS上での設定がドキュメント通りにはうまくいかず、port mapping等でなかなか進まない状態でした。
結構な時間振り回されたものの無事設定が完了したので、実際の手順を備忘録含めて残すことにしました。
localstackのリポジトリについて
以下の2つのリポジトリの存在を確認していますが、推奨されるのは後者です。
- atlassian/localstack
- localstack/localstack
atlassian/localstackのREADMEにも
This repository is no longer actively maintained.
とあります。アップデートに追従するために大事なことです。
localstack/localstackのセットアップ
Dockerを使うかどうかで変わります。使わない場合にはpypiのライブラリの導入となります。その際に問題点として考えられるのは、CICDを外部サービスに依存している場合に実行毎にlocalstackのインストールも実施した結果、大幅に時間が延びる可能性です。
今回はDockerを使うケースにて行います。既にDockerをセットアップ済みの場合はDockerComposeを実行まで飛ばしても構いません。
HomeBrewでの依存ライブラリインストール
brew update
brew cask install virtualbox docker-toolbox
docker関連のライブラリはdocker-toolboxでインストールされます。
VirtualBox上にマシンを作成
docker-machine create --driver virtualbox default
DockerComposeを実行
以下の内容でdocker-compose.yml
を作成します。記事執筆時点でのlocalstack/localstackのdocker-compose.ymlの中身をそのまま持ってきています。
version: '2.1'
services:
localstack:
container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
image: localstack/localstack
ports:
- "4566-4599:4566-4599"
- "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
environment:
- SERVICES=${SERVICES- }
- DEBUG=${DEBUG- }
- DATA_DIR=${DATA_DIR- }
- PORT_WEB_UI=${PORT_WEB_UI- }
- LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR- }
- KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
- DOCKER_HOST=unix:///var/run/docker.sock
- HOST_TMP_FOLDER=${TMPDIR}
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
docker-compose.ymlのあるフォルダ内にて実行します。
% TMPDIR=/private$TMPDIR \
DATA_DIR=/tmp/localstack/data \
SERVICES=apigateway,kinesis,dynamodb,dynamodbstreams,elasticsearch,s3,\
lambda,sns,sqs,redshift,es,ses,route53,cloudformation,cloudwatch,\
ssm,secretsmanager,stepfunctions,logs,sts,iam,ec2 \
docker-compose up -d
ゲストOSのlocalstackにアクセス
手順としてlocalhost
や0.0.0.0
へのアクセスにしているケースもありますが、VirtualBoxを経由しているためdocker-machine
にてvirtualboxのIPを確認する必要があります。
% docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v19.03.5
今回はhttp://192.168.99.100:8080/
にて、専用のWebUIにアクセスが可能となります。
また、localstackを通じたawsのテストについては、0.11.0よりportが4566に統一されています。これについても、今回はhttp://192.168.99.100:4566
となります。
% curl http://192.168.99.100:4566
{"status": "running"}
あとがき
localstackのセットアップを行う中でDocker内へのアクセスが全く上手く行かない状態が続き、
- ポートマッピングがうまく行っているか
- Docker内では正常にアクセスができるのか
- ポート指定はあっているのか
等只管確認をしていましたが、中々うまくいきませんでした。その中で以下の記事にたどり着き、VirtualBoxの存在を忘れていたことに気が付きました。
Macでdockerを使う際にlocalhostでcontainerに繋げない問題の調査 - Qiita
Docker環境構築でうまく行かない場合の参考になれば幸いです。