在 Amazon S3 和 CloudFront 上更新资产的工作流程

Workflow for updating assets on Amazon S3 and CloudFront

我正在尝试构建一个工作流来更新 S3 存储桶上的文件并使它们在 Cloudfront 上失效,以便将其从缓存中删除。

这些文件由 JS、CSS、图像、媒体等组成。我正在使用 g运行t 来缩小它们。

这就是我认为的理想情况:

  1. 运行 g运行t 在最新的代码库上准备分发;
  2. 使用 aws 客户端工具将步骤 1 中的新文件上传到 S3;
  3. 使用 aws 客户端工具使 Cloudfront 上的这些新文件无效。

我面临的问题是,在第 1 步中,缩小文件的时间戳都比 S3 上的更新,所以当我 运行 aws s3 sync 时,它会尝试上传所有文件返回到 S3。我只想上传修改后的文件

我也乐于接受有关更改整个工作流程的建议。有什么建议吗?

s3cmd 可以解决只上传修改过的文件的问题。它不是检查时间戳更改,而是检查内容更改(在内部它为每个文件分配 MD5 哈希,然后检查文件的本地版本与 S3 中存在的版本,仅上传 MD5 哈希不匹配的文件)

它有many command line options包括使从 CloudFront 分发上传的文件无效的选项