从 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 标志来本地删除从服务器移除的内容。我不知道使用同步时列表等的费用是多少,但阅读文档后你应该就能搞清楚了。

相关内容