Laden Sie Dateien von S3 herunter, ohne sie aufzulisten

Laden Sie Dateien von S3 herunter, ohne sie aufzulisten

Ich habe einen S3-Bucket mit über einer Million Dateien und etwa tausend Dateien, die jeden Tag von verschiedenen Anwendungen in verschiedenen Ordnern hinzugefügt werden.

Ich möchte alle Dateien auch lokal auf einem Linux-Server herunterladen und speichern. Was wäre der beste Weg, alle Dateien auf einmal herunterzuladen und dann nur neue Dateien herunterzuladen, beispielsweise die, die in den letzten 24 Stunden hochgeladen wurden?

Mir ist bewusst, dass Amazon für die Auflistung jeder S3-Datei eine Gebühr verlangt, daher möchte ich nicht jeden Tag alle Dateien auflisten und dann die neuesten Dateien herunterladen.

Ich habe versucht, es mit dem folgenden Playbook zu machen, und es funktioniert, aber ich habe mich gefragt, ob es einen besseren Weg gibt. Es muss nicht unbedingt Ansible sein, ich habe es nur verwendet, weil wir es für so ziemlich alles verwenden.

  - 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 }}"

Antwort1

Verwenden Sie dieAWS S3-SynchronisierungBefehl

aws s3 sync  s3://bucketname/folder/ c:\localcopy

aws s3 sync  s3://bucketname/folder/ c:\localcopy --delete

Ich verwende das Flag --delete am Ende dieses Befehls, um Dinge lokal zu löschen, die vom Server entfernt werden. Ich weiß nicht, wie hoch die Kosten für Einträge und dergleichen sind, wenn Sie die Synchronisierung verwenden, aber lesen Sie die Dokumentation, dann sollten Sie es herausfinden.

verwandte Informationen