У меня есть ведро s3 с более чем миллионом файлов и около тысячи файлов, добавляемых каждый день различными приложениями в разные папки.
Я также хотел бы скачать и хранить все файлы локально, на сервере Linux. Как лучше всего загрузить все файлы один раз, а затем загрузить только новые, скажем, загруженные в течение предыдущих 24 часов?
Я понимаю, что Amazon взимает плату за перечисление каждого файла s3, поэтому я не хочу перечислять все файлы каждый день, а затем загружать последние файлы.
Я попытался сделать это с помощью следующего сценария, и он работает, но мне было интересно, есть ли способ лучше. Необязательно использовать Ansible, я просто использовал его, потому что мы используем его практически для всего.
- name: List s3 objects
aws_s3:
bucket: "testbucket"
prefix: "test"
mode: list
register: s3objects
- name: Download s3objects
aws_s3:
bucket: "testbucket"
object: "{{ item }}"
mode: get
dest: "/tmp/{{ item|basename }}"
with_items: "{{ s3objects.s3_keys }}"
Использовать aws s3 синхронизация команда
aws s3 sync s3://bucketname/folder/ c:\localcopy
aws s3 sync s3://bucketname/folder/ c:\localcopy --delete
Я использую флаг --delete в конце этой команды для локального удаления вещей, удаленных с сервера. Я не знаю о затратах на списки и тому подобное, когда вы используете синхронизацию, но прочтите документацию, и вы должны это решить.