LoginSignup
26

More than 3 years have passed since last update.

ローカル上にLocalStackをDockerで実行

Posted at

はじめに

開発用にAWSのサービスをローカル環境に構築できる、LocalStackというプロジェクトがあります。
https://github.com/localstack/localstack

今回はDockerを使ったLocalStackの実行方法をまとめます。

環境

OS: macOS Mojave 10.14.5
Docker: 18.09.0
Docker Compose: 1.23.2

プロジェクトをプル

git clone https://github.com/localstack/localstack.git
cd localstack/

サービスの指定

環境変数 SERVICES にカンマ区切りでサービス名を指定することで起動させたいサービスを選ぶことができます。
指定がない場合、全て指定と同意です。

指定できるサービスは以下の通り

サービス サービス名 エンドポイント
API Gateway apigateway http://localhost:4567
Kinesis kinesis http://localhost:4568
DynamoDB dynamodb http://localhost:4569
DynamoDB Streams dynamodbstreams http://localhost:4570
Elasticsearch elasticsearch http://localhost:4571
S3 s3 http://localhost:4572
Firehose firehose http://localhost:4573
Lambda lambda http://localhost:4574
SNS sns http://localhost:4575
SQS sqs http://localhost:4576
Redshift redshift http://localhost:4577
ES (Elasticsearch Service) es http://localhost:4578
SES ses http://localhost:4579
Route53 route53 http://localhost:4580
CloudFormation cloudformation http://localhost:4581
CloudWatch cloudwatch http://localhost:4582
SSM ssm http://localhost:4583
SecretsManager secretsmanager http://localhost:4584
StepFunctions stepfunctions http://localhost:4585
CloudWatch Logs logs http://localhost:4586
STS sts http://localhost:4592
IAM iam http://localhost:4593
EC2 ec2 http://localhost:4597

※ サービス名はaws cliのリファレンスから
http://docs.aws.amazon.com/cli/latest/reference/#available-services

注意点: Dockerに割り当てるメモリが少ないと正しく起動しない

Dockerへのメモリ割り当てが少ないと、指定した全てのサービスが正しく実行されないことがあります。
例えば、以下のような elasticsearch の起動で実行エラーが発生します。

...
WARNING:infra.py: Service "elasticsearch" not yet available, retrying...
ERROR:infra.py: Error checking state of local environment (after some retries): Traceback (most recent call last):
...

だいたいメモリを 4 GB にすれば全てのサービスが実行できました。

多くのサービスを実行させたいときは、割り当ての量を増やすか、増やせないときは最小のサービスを指定して実行が必要です。

Dockerで実行

Docker Composeを実行

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

TMPDIR : Macの場合は指定が必須
DATA_DIR : データの永続化のために指定
SERVICES : 実行するサービスを指定 (全てのサービスを実行する際は指定はいらない。上ではサンプルとして全てを列挙)

バックグランドで実行のために -d オプションをつけています。

ログの最後に Ready と出れば、起動完了です。
すると、デフォルトではDocker上に localstack_localstack_1 という名前でプロセスが実行されていると思います。

ホストOS起動時に自動で実行するように設定

ホストOSが再起動した際も自動で実行されるよう設定値を変更します。

docker update --restart=always localstack_localstack_1

まとめ

これでAWSサービスをローカルで利用できる環境が整いました。
あとは、CLIやSDKで、各サービスのエンドポイントをLocalStackへ向けることで利用可能となります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26