Синхронизация s3cmd с бото в питоне

Я пытаюсь переместить некоторые сценарии резервного копирования с bash на python для лучшей обработки ошибок.

Я использую синхронизацию s3cmd для резервного копирования каталогов на s3. Я надеялся найти такой же простой способ сделать это непосредственно в python (вероятно, с помощью boto), но пока проще всего просто использовать subprocess.call и продолжать использовать s3cmd.

У кого-нибудь есть предложение по лучшему решению?


person TristanMatthews    schedule 05.04.2014    source источник


Ответы (1)


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

Вот как вычислить хэш MD5 локального файла (примечание: загружает все содержимое файла в память):

print hashlib.md5(open(filename, 'rb').read()).hexdigest()

7bee81f4be312203c0e29d4dfe65fb0b

И для ключа S3 (примечание: вы не должны создавать boto.s3.key.Key локально, вместо этого получите его из корзины):

key = bucket.get_key(path)
print key.etag

"7bee81f4be312203c0e29d4dfe65fb0b"

Обратите внимание, что по какой-то причине тег etag заключен в кавычки.

Чтобы выполнить синхронизацию, просто проверьте, отличаются ли MD5 и etag, прежде чем выполнять get/put.

person congusbongus    schedule 19.01.2015