2017-01-18 9 views
3

Я использую трубопровод даты Амазонки для копирования и ведро S3 в другое ведро. Это довольно простая настройка и работает ночной. Тем не менее, каждый последующий запуск копирует одни и те же файлы снова и снова - я бы просто пропустил существующие файлы и скопировал только новые, так как эта резервная копия будет в будущем довольно большой. Есть ли способ сделать это??Использование конвейера даты Amazon для резервного копирования ведра S3 - как пропустить существующие файлы и избежать ненужной перезаписи?

+0

Это чисто для резервного копирования? Вы пытаетесь выполнить какое-то преобразование/ETL по данным, прежде чем приземлиться на второе ведро? – thun

+0

Чисто резервирование! Извините haha ​​ – trevorhinesley

ответ

2

Глядя на this thread, это, кажется, не представляется возможным сделать синхронизацию с невыполнением CopyActivity:

Вы можете определенно использовать трубопровод данных, чтобы скопировать один каталог S3 в другой, с той оговоркой, что, если вы используете CopyActivity, это будет полная копия, а не rsync. Поэтому, если вы работаете с большим количеством файлов, где только небольшая часть изменилась, CopyActivity не будет самым эффективным способом сделать это.

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

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

Я не могу дать вам пример точной конфигурации, но вот пример команды, которую вы можете запустить с помощью обычного задания cron для синхронизации двух ведер: aws s3 sync s3://source_bucket s3://target_bucket.

Должно быть возможно запустить его с помощью ShellCommandActivity. Проверьте также ShellCommandActivity in AWS Data Pipeline и комментарии к ответу here.

Update: комментарий по @trevorhinesley с окончательным решением (например, по умолчанию запущенного трубопровода использует некоторые старые AWS консоли, где нет sync команды):

Для тех, кто попадается на это, у меня было чтобы запустить экземпляр EC2, затем скопируйте AMI-идентификатор, который он использовал (он находится в информации под списком экземпляров, когда вы выбираете его в меню Экземпляры в EC2). Я использовал идентификатор изображения в конвейере данных и исправил его!

+0

Большое спасибо! – trevorhinesley

+0

Как ни странно, экземпляр EC2, который развернут, имеет устаревший CLI, поэтому команда синхронизации не работает. Как я могу гарантировать, что он имеет обновленный CLI? – trevorhinesley

+1

@trevorhinesley, что странно, поскольку aws cli поставляется с предустановленной на машинах с Amazon Linux и, как правило, последняя версия. Я попытался бы изучить два направления: 1) найти версию Amazon Linux на экземпляре и, возможно, есть способ указать версию или использовать пользовательский AMI; 2) попробуйте обновить aws cli с помощью чего-то вроде 'sudo pip install -U awscli && aws s3 sync ...' –