Auto Create S3 Buckets On Localstack
Answer :
A change that came in with this commit since version 0.10.0
.
When a container is started for the first time, it will execute files with extensions .sh that are found in
/docker-entrypoint-initaws.d
. Files will be executed in alphabetical order. You can easily create aws resources on localstack using awslocal (or aws) cli tool in the initialization scripts.
version: '3.7' services: localstack: image: localstack/localstack environment: - SERVICES=s3 ports: - "4572:4572" volumes: - ./aws:/docker-entrypoint-initaws.d
With a script in directory ./aws/buckets.sh
:
#!/bin/bash set -x awslocal s3 mb s3://bucket set +x
Note: the set [-/+] x
is purely there to turn on and off outputting of the commands being executed.
Will produce this output:
... localstack_1 | Starting mock S3 (http port 4572)... localstack_1 | Waiting for all LocalStack services to be ready localstack_1 | Ready. localstack_1 | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initaws.d/buckets.sh localstack_1 | ++ awslocal s3 mb s3://bucket localstack_1 | make_bucket: bucket localstack_1 | ++ set +x localstack_1 |
I was been able to achieve this with Localstack with kind of "workaround":
- Start Localstack
Create expected buckets, e.g.:
aws --endpoint-url=http://localhost:4572 s3 mb s3://test1
- Above line will update the
s3_api_calls.json
file in the Localstack directory (by default on Linux it's/tmp/localstack/data
- Backup the file
- Put the copied file in the Localstack directory (
/tmp/localstack/data
by default) before starting the stack again - You should be able to see something like
2019-03-21T08:38:28:INFO:localstack.utils.persistence: Restored 2 API calls from persistent file: /tmp/localstack/data/s3_api_calls.json
the in startup log after you start Localstack again and the bucket should be available:aws --endpoint-url=http://localhost:4572 s3 ls s3://test1
Comments
Post a Comment