Получить файл в корзину S3 в каждом регионе

У меня есть ZIP-файл (в корзине S3), который должен оказаться в корзине S3 в каждом регионе в рамках одной учетной записи.

Каждая из этих корзин имеет одинаковые политики корзин, которые позволяют моей учетной записи загружать в них файлы, и все они следуют одному и тому же соглашению об именах, например: foobar-{region}

например: foobar-us-west-2

Есть ли способ сделать это без ручного перетаскивания файла в консоли в каждую корзину или с помощью команды aws s3api copy-object 19 раз? Это может происходить довольно часто по мере обновления файла, поэтому я ищу более эффективный способ сделать это.

Один из способов, которым я думал об этом, заключался в том, чтобы создать лямбду, содержащую массив всех 19 нужных мне регионов, а затем пройтись по ним, чтобы создать 19 имен корзин для конкретных регионов, в каждое из которых будет скопирован объект.

Есть ли способ лучше?


person David    schedule 02.03.2019    source источник


Ответы (2)


Просто поместите его в функцию bash. Используя aws cli и jq, вы можете сделать следующее:

    aws s3api list-buckets | jq -rc .Buckets[].Name | while read i; do 
      echo "Bucket name: ${i}"
      aws s3 cp your_file_name s3://${i}/
    done
person marcincuber    schedule 02.03.2019
comment
это может сработать, но, к сожалению, я не могу требовать, чтобы люди устанавливали команду jq, чтобы они могли использовать этот скрипт. - person David; 04.03.2019
comment
если установить jq слишком сложно, вы всегда можете использовать параметр --query, который является частью aws cli. См. некоторые примеры в -› документах. - person marcincuber; 04.03.2019
comment
Например, aws s3api list-buckets --query "Buckets[].Name", но вам, возможно, придется сначала игнорировать элемент списка, так как они будут квадратными скобками. - person marcincuber; 04.03.2019

Несколько вариантов:

  • При загрузке может активироваться функция AWS Lambda. Затем он может подтвердить, следует ли реплицироваться объект (например, я полагаю, вы не хотите копировать каждый загруженный файл?), а затем скопировать их. Обратите внимание, что копирование во все регионы может занять некоторое время.
  • Используйте межрегиональную репликацию, чтобы скопировать содержимое сегмента (или вложенного пути) в другие сегменты. Это будет сделано автоматически при загрузке.
  • Напишите сценарий bash или небольшую программу на Python для локального запуска, которая будет скопировать файл в каждое место. Обратите внимание, что более эффективно вызывать copy_object() для копирования файла из одной корзины S3 в другую, а не загружать 19 раз. Просто загрузите в первую корзину, а затем скопируйте оттуда в другие места.
person John Rotenstein    schedule 03.03.2019
comment
репликация между регионами была бы идеальной, но, по-видимому, она поддерживает репликацию только в одно другое ведро — мне нужно реплицировать в несколько других ведер - person David; 04.03.2019
comment
Я думаю, вы можете связать ведра: A -> B -> C - person John Rotenstein; 05.03.2019