如何*实际*排除 AWS S3 同步中的目录?

如何*实际*排除 AWS S3 同步中的目录?

aws s3 sync命令有一个--exclude标志,可让您从同步中排除文件夹。但是,即使文件不是从该目录上传的,该命令仍会查看并处理该文件夹中的所有文件。我首先想排除该文件夹的原因是,这是一个包含大量数据的非常大的文件夹,而我实际想要同步的数据只有父文件夹中的几 MB 和其他几个子文件夹中的数据。但是,由于该数据子文件夹中有几 GB 的数据,因此同步这几 MB 需要几分钟。我有什么办法可以实际上排除(例如甚至不被查看或处理)该子文件夹,以便同步命令在合理的时间内完成?

答案1

我认为这可能是对 S3 所提供的功能的期望不一致的情况。

S3 实际上没有任何结构,存储桶只是一组扁平的对象,其中的完整字符串可能被视为“路径”,是每个对象的键
ListObjectsV2 API 操作但是提供了诸如指定前缀(仅返回具有以特定字符串开头的键的对象)和指定分隔符的选项(按提供的分隔符拆分键并对重复的键段进行分组)的功能,这些功能允许您呈现存储桶的内容,就好像它具有结构一样(例如,像 AWS 控制台所做的那样)。

aws s3 sync实用程序可能也会从正常开始工作ListObjectsV2 API 操作,但此 API 不具备与同步实用程序中的--exclude(或)选项等同的功能,只有获取按键前缀过滤列表的选项。 因此,同步实用程序似乎必须在客户端处理这些更灵活的过滤选项,因为它会处理指定前缀的完整对象列表,如果指定前缀下有大量应该跳过的对象,那么这种方式永远不会真正有效。--include

在您的场景中,您可能想要做的是指定您想要的一个或多个前缀,而不是指定更通用的前缀并过滤您不想要的。如果您想要的内容无法通过前缀识别,您可能需要考虑更改命名,以便可以指定一些已知的前缀。(或者甚至可能为不同类型的数据使用单独的存储桶,如果这更适合您的情况。)

答案2

虽然 Håkan Lindqvist 的答案在技术上似乎是正确的,但不幸的是它并没有解决问题。同步(上传)几 MB 需要长达 30 分钟,因为无论如何都要排除一个较大的子文件夹。由于 AWS CLI 似乎本身不支持我需要的功能,因此我转而使用另一个工具:shell 脚本。

#!/bin/sh

for localfile in /home/path/to/source/files/*.*
do 
aws s3 cp "$localfile" s3://path/to/bucket/
done

aws s3 sync /home/path/to/source/files/subfolder1 s3://path/to/bucket/subfolder1
aws s3 sync /home/path/to/source/files/subfolder2 s3://path/to/bucket/subfolder2
aws s3 sync /home/path/to/source/files/subfolder3 s3://path/to/bucket/subfolder3
# Deliberately skipping subfolder4
aws s3 sync /home/path/to/source/files/subfolder5 s3://path/to/bucket/subfolder5
aws s3 sync /home/path/to/source/files/subfolder6 s3://path/to/bucket/subfolder6
aws s3 sync /home/path/to/source/files/subfolder7 s3://path/to/bucket/subfolder7
aws s3 sync /home/path/to/source/files/subfolder8 s3://path/to/bucket/subfolder8
aws s3 sync /home/path/to/source/files/subfolder9 s3://path/to/bucket/subfolder9
aws s3 sync /home/path/to/source/files/subfolder10 s3://path/to/bucket/subfolder10

虽然这种方法解决了我在特定情况下遇到的问题,但它也存在缺点:

  • aws s3 cp命令始终会上传文件,即使文件自上次上传后没有发生任何变化
  • aws s3 cp对我来说,在 for 循环中运行该命令似乎明显比aws s3 sync在正常情况下运行该命令慢。
  • 根据 Håkan Lindqvist 的回答,我不确定这种方法是否能帮助那些正在下载而不是上传的人
  • 非跨平台(这在 Windows 上不起作用。幸运的是我使用的是 Linux。)

aws s3 sync尽管存在缺点,但就我的情况而言,这比使用标志要快一个数量级--exclude,所以我很满意。但我确实希望亚马逊将来能提供更好的选择。

相关内容