【问题标题】:Auto create S3 Buckets on localstack在 localstack 上自动创建 S3 存储桶
【发布时间】:2022-05-20 00:48:25
【问题描述】:

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

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

是否已经为 localstack 内置了一些东西?

【问题讨论】:

    标签: amazon-s3 docker-compose localstack


    【解决方案1】:

    自版本 0.10.0 以来,此 commit 带来的更改。

    容器第一次启动时,会执行文件 扩展名为 .sh,可在 /docker-entrypoint-initaws.d 中找到。 文件将按字母顺序执行。您可以轻松创建 使用 awslocal(或 aws)cli 工具在 localstack 上的 aws 资源 初始化脚本。

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

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

    #!/usr/bin/env 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  |
    

    【讨论】:

    • 答案的脚本部分略有错误。 mbs3 是错误的方式!应该是awslocal s3 mb s3://bucket。不过感谢您的回答,为我省去了很多麻烦!
    • @MattKeen 应该在 localstack 容器中创建目录docker-entrypoint-initaws.d 及其内容(.sh 脚本)在哪里?我已经尝试在/usr/local/bin//opt/code/localstack/ 中创建它,但它看起来不像.sh 脚本在容器启动时运行。
    • 它们应该在/docker-entrypoint-initaws.d,因此./aws/buckets.sh将是/docker-entrypoint-initaws.d/buckets.sh,基于上面的配置。
    • 太完美了,谢谢。您知道如何设置我的运行状况检查以等待创建此存储桶吗?
    • 这可以作为健康检查的测试test: "awslocal s3api head-bucket --bucket bucket"
    【解决方案2】:

    我能够通过 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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-04-24
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 2018-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-26
        相关资源
        最近更新 更多