在本地堆栈上自动创建S3存储桶

时间:2018-12-04 19:12:07

标签: amazon-s3 docker-compose atlassian-localstack

在我的docker-compose中使用localstack主要是模仿S3。

我知道我可以创建存储桶,这不是问题。我想做的是在运行docker-compose时自动创建存储桶。

已经为本地堆栈构建了一些东西吗?

3 个答案:

答案 0 :(得分:3)

commit自版本0.10.0起带来的变化。

  

首次启动容器时,它将执行文件   在/docker-entrypoint-initaws.d中带有扩展名.sh。   文件将按字母顺序执行。您可以轻松创建   使用以下命令中的awslocal(或aws)cli工具在本地堆栈上的aws资源   初始化脚本。

version: '3.7'
services:
  localstack:
    image: localstack/localstack
    environment:
      - SERVICES=s3
    ports:
      - "4572:4572"
    volumes:
      - ./aws:/docker-entrypoint-initaws.d

在目录./aws/buckets.sh中具有脚本:

#!/bin/bash
set -x
awslocal s3 mb s3://bucket
set +x

注意:set [-/+] x纯粹是用于打开和关闭正在执行的命令的输出。

将产生以下输出:

...
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  |

答案 1 :(得分:0)

我能够使用“解决方法”通过Localstack实现此目标:

  1. 启动本地堆栈
  2. 创建预期的存储分区,例如:

    aws --endpoint-url=http://localhost:4572 s3 mb s3://test1   
    
  3. 以上一行将更新Localstack目录中的s3_api_calls.json文件(在Linux上默认为 /tmp/localstack/data
  4. 备份文件
  5. 在再次启动堆栈之前,将复制的文件放入Localstack目录(默认为/tmp/localstack/data
  6. 重新启动Localstack之后,您应该能够在启动日志中看到类似2019-03-21T08:38:28:INFO:localstack.utils.persistence: Restored 2 API calls from persistent file: /tmp/localstack/data/s3_api_calls.json的内容,并且存储桶应该可用:aws --endpoint-url=http://localhost:4572 s3 ls s3://test1

答案 2 :(得分:0)

DATA_DIR:用于保存持久数据的本地目录(当前仅支持以下服务:Kinesis,DynamoDB,Elasticsearch,S3)