2016-10-17 3 views
0

Я написал код, где я перечисляю файлы в местоположении S3, а затем в цикле, копируя эти файлы в временную папку для обработки. После обработки я переношу эти файлы в место архива.Amazon S3: файлы, найденные во время копирования, но отсутствующие во время копирования

Эта кодовая логика выполняется часто в cronjob.

В последнее время мой код не работает, поскольку в последующих исполнениях кода он каким-то образом обнаруживает некоторые файлы (которые были перенесены в предыдущем исполнении) при их перечислении, но сбой при попытке копирования, поскольку файлы фактически не существуют ,

Ошибка, которую я получаю, - При вызове операции HeadObject произошла ошибка клиента (404): Ключ {some-file} не существует.

Может кто-то, пожалуйста, помогите мне понять, почему я столкнулся с этой проблемой и как ее решить?

Любая помощь будет принята с благодарностью.

+0

Возможно, вы захотите использовать [интерфейс командной строки AWS] (http://aws.amazon.com/cli/) для копирования файлов. Он имеет команду 'aws s3 cp', а также команду' aws s3 sync', которая может синхронизировать файлы между S3 и локальным каталогом. –

+0

@johnRotenstein Это то, что я использую и придерживаюсь этой проблемы. Механизм повторения имеет смысл, задаваясь вопросом, есть ли другие варианты, которые я должен оценить, чтобы выбрать лучший. –

+0

Было бы полезно увидеть некоторые из ваших кодов. Важные части, по крайней мере. – jbird

ответ

0

Возможно, вы столкнулись с ошибкой согласованности. S3 имеет согласованность после записи, когда вы вставляете новый объект в ведро и eventual consistency для всех других операций над объектами.

Чтобы решить эту проблему, вам может потребоваться больше времени для продолжения выполнения последующих сценариев.

+0

как вы определяете «дольше», когда говорите «... нужно подождать дольше ...». (Хотя я понимаю, что это может зависеть от конкретного сценария). Любые рекомендации? –

+1

Обычно всего несколько секунд, но нет гарантии, и в некоторых крайних случаях это может занять гораздо больше времени. http://www.stackdriver.com/eventual-consistency-really-eventual/ http://stackoverflow.com/questions/23786609/what-is-maximum-amazon-s3-replication-time-on-file-upload –

0

При создании нового файла может потребоваться время для полной синхронизации между всеми AZ в регионе. Это может потребовать повторного чтения прочитанного, если он не работает. Не забудьте применить случайное и увеличивающееся ожидание между чтением, не перегружать вашу систему, а также разрешить любые возможные условия гонки. Также не повторяйте навсегда, так как вы хотите, чтобы выполнение текущего скрипта заканчивалось перед новым.

Другая возможность - запустить ваш скрипт как функцию лямбда с триггером при создании файла S3.