Auto create S3 Buckets on localstack

2020-07-01 06:04发布

Using localstack in my docker-compose mainly to mimic S3.

I know I can create buckets, thats not the issue. What I would like to do is automatically create the buckets when I run a docker-compose up.

Is there something build in already for localstack?

3条回答
Rolldiameter
2楼-- · 2020-07-01 06:45

DATA_DIR: Local directory for saving persistent data (currently only supported for these services: Kinesis, DynamoDB, Elasticsearch, S3)

查看更多
趁早两清
3楼-- · 2020-07-01 06:47

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  |
查看更多
Explosion°爆炸
4楼-- · 2020-07-01 06:47

I was been able to achieve this with Localstack with kind of "workaround":

  1. Start Localstack
  2. Create expected buckets, e.g.:

    aws --endpoint-url=http://localhost:4572 s3 mb s3://test1   
    
  3. Above line will update the s3_api_calls.json file in the Localstack directory (by default on Linux it's /tmp/localstack/data
  4. Backup the file
  5. Put the copied file in the Localstack directory ( /tmp/localstack/data by default) before starting the stack again
  6. 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
查看更多
登录 后发表回答