Amazon S3 是不是向 CloudFront 发送失效信号?

Posted

技术标签:

【中文标题】Amazon S3 是不是向 CloudFront 发送失效信号?【英文标题】:Does Amazon S3 send invalidation signals to CloudFront?Amazon S3 是否向 CloudFront 发送失效信号? 【发布时间】:2012-09-28 18:42:34 【问题描述】:

我似乎在文档中看不到明显的答案。

当我在 S3 上更新文件并启用 CloudFront 时,S3 是否会向 CloudFront 发送失效信号?还是更新文件后需要自己发送?

【问题讨论】:

【参考方案1】:

S3 不会向 CloudFront 发送任何失效信息。默认情况下,CloudFront 将在从源检索数据时设置的缓存控制标头指定的最长时间内保存信息(如果愿意,它可能会提前从缓存中删除项目)。

您可以通过创建失效批处理来使缓存条目失效。这将花费您的钱:每月的第 1000 个请求是免费的,但除此之外,每个请求的费用为 0.005 美元 - 如果您每天使 1000 个文件无效,则每月将花费您 150 美元(除非您可以使用通配符功能)。您当然可以使用 Amazon Lambda 函数触发此事件以响应 s3 事件。

另一种方法是在对象更改时使用不同的路径(实际上是分代缓存键)。同样,您可以将查询参数附加到 url 并在您希望 cloudfront 获取新副本时更改该查询参数(为此,您需要告诉 CloudFront 使用查询字符串参数 - 默认情况下它会忽略它们)。

如果您只进行不频繁(但较大)的更改,另一种方法是简单地创建一个新的云端分发。

【讨论】:

我有一种可怕的感觉,就是这种情况。好像他们错过了一个功能。您可以为此提供参考还是只是没有指定?谢谢。 将新版本上传到 S3 意味着您要清除 CloudFront 中的缓存是错误的假设。是的,这可能是您正在寻找的行为,但 AWS 假设这就是您想要的行为是冒昧的。在许多情况下,我会在 CloudFront 中缓存内容,因为我知道它会根据我的设置过期,并且会提前在 S3 中暂存更新的内容。就我而言,自动失效与我想要的相反。 不是假设,但它似乎是一个有用的参数。 @RyanParman 刚刚看到你的简历,所以我想我会再解释一下!我完全了解 CloudFront 的工作方式(我自己使用它自己的来源)。我只是认为,在很多情况下,我认为在 CloudFront 不失效的情况下允许您将新资源重新上传到 S3 是没有意义的,特别是因为 S3 和 CF 是分开但紧密集成的。由于 S3 具有此信息(“资源 X 已更改”),我的用例(为什么我要写这个问题)是我希望它发送失效。我看到了你的用例,所以我想我们只是想将它用于不同的事情。但我确信我并不孤单。 我当然可以把它作为 S3 和 CloudFront 团队在未来功能更新中应该考虑的事情。我现在会联系那些团队。谢谢!【参考方案2】:

据我所知,所有的 CDN 都是这样工作的。

这就是为什么您通常使用 foo-x.y.z.ext 之类的东西来对 CDN 上的资产进行版本控制。我不会使用foo.ext?x.y.z,因为某些浏览器和代理从不使用?QUERY_STRING 缓存资产。

一般来说,您可能需要检查一下: https://developers.google.com/speed/docs/best-practices/caching

它包含许多最佳实践,并详细介绍了要做什么以及它是如何工作的。

关于 S3 和 Cloudfront,我对缓存失效不是很熟悉,但 Frederick Cheung 所说的都是正确的。

一些提供商还允许您直接清除缓存,但由于 CDN 的性质,这些更改几乎不会立即发生。另一种方法是设置较小的 TTL(过期标头),以便更频繁地刷新资产。但我认为这也违背了 CDN 的目的。

在我们的案例(Edgecast)中,缓存失效是可能的(手动过程)并且是免费的,但我们很少这样做,因为我们会相应地对资产进行版本控制。

【讨论】:

感谢您的回答。我熟悉 S3 和 CloudFront(以及其他),我在询问这两个亚马逊产品之间的具体集成。 好的,我没有特别明白。所以是的 - 我的建议是仍然版本资产并在对象上设置 Cache-Control 标头。 谢谢,看来我只能解决它了。我仍然认为这是他们错过的重要且易于实现的功能。

以上是关于Amazon S3 是不是向 CloudFront 发送失效信号?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 无法通过 Cloudfront 上传文件

为啥需要 Amazon S3 和 Cloudfront?

Amazon S3 Cloudfront 部署最佳实践

使用 Amazon S3 和 Cloudfront 的 CORS

Amazon S3 重定向和 Cloudfront

Gzip 与 Amazon S3/Cloudfront 失败