Назад | Перейти на главную страницу

Скачивание файлов с S3 без листинга

У меня есть ведро 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 в конце этой команды для локального удаления вещей, удаленных с сервера. Я не знаю о затратах на списки и тому подобное, когда вы используете синхронизацию, но прочтите документацию, и вы должны это решить.