Автоматическое создание ковшей S3 на локальном столе

Использование localstack в моем docker-compose в основном для имитации S3.

Я знаю, что могу создавать ведра, это не проблема. То, что я хотел бы сделать, автоматически создает ведра, когда я запускаю сборку докеров.

Есть ли что-то для сборки уже для localstack?

Ответ 1

Я смог добиться этого с помощью Localstack с помощью своего рода "обходного пути":

  1. Начать локальный стек
  2. Создайте ожидаемые сегменты, например:

    aws --endpoint-url=http://localhost:4572 s3 mb s3://test1   
    
  3. Над строкой будет обновлен файл s3_api_calls.json в каталоге Localstack (по умолчанию в Linux это /tmp/localstack/data
  4. Сделайте резервную копию файла
  5. Поместите скопированный файл в каталог Localstack (по умолчанию /tmp/localstack/data) перед повторным запуском стека
  6. Вы должны увидеть что-то вроде 2019-03-21T08:38:28:INFO:localstack.utils.persistence: Restored 2 API calls from persistent file: /tmp/localstack/data/s3_api_calls.json в журнале запуска после того, как снова запустите Localstack, и корзина должна быть доступна: aws --endpoint-url=http://localhost:4572 s3 ls s3://test1

Ответ 2

Изменения, которые произошли с этим коммитом начиная с версии 0.10.0.

Когда контейнер запускается в первый раз, он выполняет файлы с расширениями .sh, которые можно найти в /docker-entrypoint-initaws.d. Файлы будут выполнены в алфавитном порядке. Вы можете легко создать ресурсы aws в localstack с помощью инструмента cli awslocal (или 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 mb s3 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  |