У меня есть хранилище 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 }}"
решение1
Использоватьaws s3 синхронизациякоманда
aws s3 sync s3://bucketname/folder/ c:\localcopy
aws s3 sync s3://bucketname/folder/ c:\localcopy --delete
Я использую флаг --delete в конце этой команды, чтобы локально удалить вещи, которые удалены с сервера. Я не знаю о расходах на листинги и т. п., когда вы используете синхронизацию, но прочитайте документацию, и вы должны это понять.