更有效地使用 aws s3 同步?

010*_*101 3 amazon-s3 amazon-web-services

最近,我们注意到我们的 AWS 账单比平时高。这是由于在aws s3 sync我们的常规构建过程中添加了一个任务。构建过程会生成大约 3,000 个文件。构建后,我们运行aws s3 sync上传他们集体到一个桶里。问题是这在金钱上是昂贵的。每次上传都要花费我们大约 2 美元(我们认为),这加起来就是每月的账单,令人吃惊。

除了 1 或 2 个这些文件之外,所有文件实际上都在不同版本之间发生了变化。其余的总是一样的。然而,aws s3 sync看到他们都改变了并上传了全部内容。

文档说aws s3 sync比较文件的上次修改日期和字节大小以确定是否应该上传。构建服务器每次都会创建所有这些全新的文件,因此上次修改日期总是会更改。

我想做的是让它计算每个文件的校验和或散列,然后使用该散列来比较文件。 Amazon s3 已经有 etag 字段,它可以是文件的 MD5 哈希值。 但该aws s3 sync命令不使用 etag。

有没有办法使用etag?有没有其他方法可以做到这一点?

最终结果是我只想上传实际上不同的 1 或 2 个文件(并节省大量成本)

Joh*_*ein 5

aws s3 sync命令有一个--size-only参数。

aws s3 同步选项

--size-only (boolean) 使每个键的大小成为决定是否从源同步到目标的唯一标准。

如果使用相同的内容更新所有文件,这可能会避免复制所有文件。

  • 但使用“--size-only”时,“aws s3sync”可能无法上传已更改但大小仍然相同的文件。 (15认同)

小智 1

S3 对每 1,000 个 PUT 请求 ( doc ) 收取 0.005 美元的费用,因此上传 3,000 个文件的每个构建成本不太可能是 2 美元。如果您每天运行 50-100 个构建,也许每天 2 美元,但这仍然不多。

如果您确实为每次构建支付了这么多费用,则应该启用 CloudTrail 事件并查看实际写入的内容(就此而言,也许您已经创建了某种递归 CloudTrail 事件日志)。

最终结果是我只想上传 1 或 2 个实际上不同的文件

这些文件是您的构建生成的工件吗?如果是,为什么不添加一个显式复制它们的构建步骤呢?