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