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.