從 S3 下載檔案而不列出

從 S3 下載檔案而不列出

我有一個 s3 儲存桶,其中包含超過一百萬個文件,每天由各種應用程式將大約一​​千個文件添加到各個資料夾中。

我想在 Linux 伺服器上本地下載並保存所有檔案。一次下載所有文件然後僅下載新文件(例如過去 24 小時內上傳的文件)的最佳方式是什麼?

據我了解,亞馬遜會收取列出每個 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 標誌來刪除本地從伺服器中刪除的內容。我不知道使用同步時的列表成本等,但閱讀文檔,您應該解決它。

相關內容