Как запланировать синхронизацию aws s3 s3: // bucket1 s3: // bucket2 с использованием ресурсов AWS? - PullRequest
1 голос
/ 11 октября 2019

Я хочу запланировать выполнение команды aws s3 sync s3://bucket1 s3://bucket2 каждый день в определенное время, скажем, в 3 часа ночи. Какие варианты у нас есть, чтобы запланировать это, используя ресурсы aws, такие как лямбда и т. Д.?

Я видел много людей, использующих планировщик Windows, но поскольку это синхронизация с s3 по s3, не лучше использовать планировщик серверов Windows для запуска этой команды через cli.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Это звучит как случай Проблема XY . То есть, скорее всего, «планирование выполнения команды CLI AWS» не является вашей основной проблемой. Я призываю вас задуматься над тем, действительно ли ваша проблема заключается в том, чтобы «заставить одну корзину S3 точно копировать содержимое другой».

На данный момент у вас есть несколько вариантов. В целом они подразделяются на две категории:

  1. Активно синхронизировать объекты из корзины A в корзину B. Это можно сделать с помощью любого количества уже упомянутых методов, включая вашу идею планирования команды CLI AWS. .

  2. Опирайтесь на Встроенная репликация S3 , и это, вероятно, то, что вы хотите .

Причина, по которой репликация S3 была реализована AWS, состоит в том, чтобы решить именно эту проблему. Если у вас нет дополнительных соображений (если да, обновите ваш вопрос, чтобы мы могли лучше ответить на него :)), репликация, вероятно, ваш лучший, самый простой и самый надежный вариант.

0 голосов
/ 16 октября 2019

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

Cloudwatch события, чтобы вызвать то, что собирается выполнить вашу задачу. Вы можете использовать его как crontab.

Лямбда-функции: 1 - дать лямбда-функции роль IAM, которая позволяет читать из bucket1 и записывать в bucket2, а затем вызывать API. 2 - поскольку aws cli является инструментом Python, вы можете вставить aws cli в качестве зависимости python и использовать его в своей.

Вот ссылка на учебник: https://bezdelev.com/hacking/aws-cli-inside-lambda-layer-aws-s3-sync/

Docker + ECS Fargate: 0 - выберите любой образ докера с предустановленным aws-cli, например this 1 - создайте кластер ECS Fargate (вам ничего не будет стоить) 2 - создайте определение задачи ECS и внутрион использует образ, который вы выбрали на шаге 0, и по команде введите «aws s3 sync bucket1 bucket2» 3 - создайте расписание, которое будет использовать ваше определение задачи, созданное на шаге 2

Дополнительные замечания: Это те, которые я бы использовал. Вы также можете использовать cloudwatch для запуска облачной информации, которая создаст экземпляр ec2 и использовать поле userdata для запуска синхронизации, вы можете создать ami для ec2, который в /etc/rc.local имеет команду sync, а затем команду halt,и несколько других вариантов, которые работают. Но я бы посоветовал вам получить лямбда-опцию, если ваша работа по синхронизации не занимает более 15 минут (что является временем ожидания лямбды), тогда я бы выбрал опцию докера.

...