100 万を超えるファイルを含む S3 バケットがあり、さまざまなアプリケーションによって毎日約 1,000 のファイルがさまざまなフォルダーに追加されます。
すべてのファイルを Linux サーバーにローカルにダウンロードして保存したいと思っています。すべてのファイルを 1 回ダウンロードしてから、過去 24 時間以内にアップロードされたファイルなど、新しいファイルのみをダウンロードする最適な方法は何でしょうか。
Amazon は各 s3 ファイルの一覧表示に対して料金を請求するので、毎日すべてのファイルを一覧表示して最新のファイルをダウンロードしたくないのは理解しています。
次のプレイブックで試してみましたが、うまくいきました。しかし、もっと良い方法があるのではないかと考えていました。必ずしも Ansible を使用する必要はありませんが、ほとんどすべての用途で使用しているため、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 フラグを使用します。同期を使用する場合のリストなどのコストについてはわかりませんが、ドキュメントを読んで解決できるはずです。