はじめに
開発用に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へ向けることで利用可能となります。