我似乎无法在文档中看到明显的答案。Amazon S3是否将失效信号发送至CloudFront?
当我在S3上更新文件并且启用了CloudFront时,S3是否向CloudFront发送了无效信号?或者我需要在更新文件后自己发送它?
我似乎无法在文档中看到明显的答案。Amazon S3是否将失效信号发送至CloudFront?
当我在S3上更新文件并且启用了CloudFront时,S3是否向CloudFront发送了无效信号?或者我需要在更新文件后自己发送它?
S3不向CloudFront发送任何失效信息。默认情况下,CloudFront将保存信息,最长时间为缓存控制标头指定的最长时间,当从原始数据检索数据时它会设置此标头(如果感觉像这样,它可能会先从缓存中删除项目)。
您可以通过创建无效批次来使缓存条目无效。这会花费你的钱:每个月的第1000个请求是免费的,但除此之外,它每个请求的成本为0.005美元 - 如果你每天失去1000个文件,每月需要花费150美元(除非你可以使用通配符功能)。您当然可以使用Amazon Lambda函数来触发此事件,以响应s3事件。
另一种方法是在对象更改时使用不同的路径(实际上是世代缓存键)。同样,如果希望cloudfront获取新副本,则可以将查询参数追加到url并更改该查询参数(要执行此操作,您需要告诉CloudFront使用查询字符串参数 - 默认情况下会忽略它们)。
另一种方式,如果你只是不经常(但很大)的变化是简单地创建一个新的云端分布。
据我所知,所有的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,我并不是非常熟悉缓存失效,但是冯检基所说的都是正确的。
有些提供程序还允许您直接清除缓存,但由于CDN的性质,这些更改几乎不会立即发生。另一种方法是设置较小的TTL(过期标题),以便资产更新更频繁。但我认为这也击败了CDN的目的。
在我们的案例(Edgecast)中,高速缓存失效是可能的(手动过程)且免费,但我们很少这样做,因为我们相应地版本化了我们的资产。
我有一种可怕的感觉,情况是如此。看起来他们错过了一个功能。你能提供一个参考吗?还是只是没有指定?谢谢。 – Joe
将一个新版本上传到S3意味着您想清除CloudFront中的缓存是一个错误的假设。是的,这可能是你正在寻找的行为,但是AWS会放任你放弃,这就是你想要的。在很多情况下,我会在CloudFront中将内容缓存,并知道它会根据我的设置过期,并会提前更新S3中的内容。就我而言,自动失效与我想要的相反。 –
不假设,但它似乎是一个有用的参数。 – Joe