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

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

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

Есть ли что-то встроенное в localstack?


person ThomasVdBerge    schedule 04.12.2018    source источник


Ответы (3)


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

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

#!/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  |
person Matthew Warman    schedule 21.10.2019
comment
Сценарий ответа немного неверен. mb и s3 неверны! Должно быть awslocal s3 mb s3://bucket. Спасибо за ответ, избавив меня от лишних хлопот! - person Matt Keen; 22.11.2019
comment
@MattKeen, где предполагается создать каталог docker-entrypoint-initaws.d и его содержимое (.sh скрипты) в контейнере localstack? Я пробовал создать его в /usr/local/bin/ и /opt/code/localstack/, но похоже, что .sh скрипты не запускаются при запуске контейнера. - person feature_not_bug; 23.12.2019
comment
Они должны быть в /docker-entrypoint-initaws.d, поэтому ./aws/buckets.sh будет /docker-entrypoint-initaws.d/buckets.sh, в зависимости от конфигурации выше. - person Matthew Warman; 06.01.2020
comment
???? спасибо, действительно работает! - person Hosar; 03.02.2021
comment
Отлично, спасибо. Вы хоть представляете, как настроить проверку работоспособности на ожидание создания этого сегмента? - person Boris Le Méec; 08.04.2021
comment
Это может работать как тест для проверки работоспособности test: "awslocal s3api head-bucket --bucket bucket" - person Matthew Warman; 12.04.2021

Мне удалось добиться этого с помощью 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
person SathOkh    schedule 21.03.2019

DATA_DIR: локальный каталог для сохранения постоянных данных (в настоящее время поддерживается только для этих служб: Kinesis, DynamoDB, Elasticsearch, S3)

person Bigo    schedule 19.11.2019