`aws s3 cp` 与 `aws s3 sync` 行为和成本

Roh*_*ngh 8 amazon-s3 amazon-web-services static-site

我有一个静态站点,我将其部署到该站点,s3然后将CloudFront其分发给用户。构建站点后,我想将新构建推送到s3. 我找到了两种方法来做到这一点。

  • aws s3 cp --recursive ./public/ s3://bucket-name --cache-control 'public, max-age=300, s-maxage=31536000'

  • aws s3 sync --delete ./public/ s3://bucket-name --cache-control 'public, max-age=300, s-maxage=31536000'

我计划每周部署一次或两次。

我想知道这些哪个更便宜(钱)?更明确地说,我想知道从长远来看,这些中哪一个会降低我的成本?

我尝试阅读文档,但无法找出差异。请帮我解决一下这个。

JD *_*D D 17

需要注意的一件事是,aws s3 cp --recursive并且aws s3 sync --delete有不同的行为。

aws s3 cp将复制所有文件,即使它们已存在于目标区域中。如果从源中删除文件,它也不会从目标中删除文件。

aws s3 sync在复制文件之前查看目标并且只复制新的和更新的文件。--delete如果在源中删除了这些内容,该标志还将删除目标中的内容。

sync命令是您想要的,因为它旨在处理在复制最少量数据的同时保持两个文件夹同步。同步应该会导致更少的数据被推送到 S3 存储桶,因此总体成本应该更低。

举一个反例,一个用例aws s3 cpsync如果您只需要传输文件并且您知道所有文件都是新的目的地,则性能优于并且成本更低。这是更高的性能和更低的成本,因为代码在开始传输之前不会检查目的地是否存在。

  • 从文档看来,默认行为是传输大小不同或源时间戳比目标更新的文件。您可以选择让它也传输源时间戳较旧的文件。但它不比较文件内容。 (5认同)
  • 请注意,“aws s3sync”使用的比较方法非常简单:它仅检查文件大小变化,而不检查文件内容。在我看来,这使得“sync”选项非常不可靠,我尽量避免使用它。但也许是我的设置(从服务器同步到 S3 存储桶)触发了这个简单的比较方法。很高兴阅读其他人的经历。 (2认同)