Amazon s3 AmazonS3是否向CloudFront发送失效信号?

Amazon s3 AmazonS3是否向CloudFront发送失效信号?,amazon-s3,amazon,amazon-cloudfront,Amazon S3,Amazon,Amazon Cloudfront,我在文档中似乎看不到明显的答案 当我在S3上更新文件并启用CloudFront时,S3是否向CloudFront发送失效信号?或者我需要在更新文件后自己发送吗?S3不会向CloudFront发送任何无效信息。默认情况下,CloudFront将在从源站检索数据时设置的缓存控制头指定的最长时间内保存信息(如果愿意,它可能会更早地从缓存中删除项目) 可以通过创建无效批处理使缓存项无效。这将花费您的钱:每个月前1000个请求是免费的,但超过此值,每个请求的费用为0.005美元-如果您每天使1000个文件

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


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

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

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

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


另一种方法是,如果您只做很少(但较大)的更改,只需创建一个新的cloudfront发行版。

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

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

一般情况下,您可能需要查看以下内容:

它包含了许多最佳实践,并详细介绍了如何做以及如何工作

关于S3和Cloudfront,我不太熟悉缓存失效,但Frederick Cheung提到的都是正确的

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


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

我有一种可怕的感觉,就是这样。好像他们错过了一个功能。你能提供一个参考吗?或者只是没有指定?谢谢。如果将新版本上传到S3意味着要清除CloudFront中的缓存,那么这将是一个错误的假设。是的,这可能是您正在寻找的行为,但如果AWS认为这就是您想要的,那就太冒昧了。在许多情况下,我会在CloudFront中缓存内容,因为我知道它将根据我的设置过期,并会提前在S3中发布更新的内容。在我的例子中,自动失效与我想要的正好相反。不是假设,但它似乎是一个有用的参数。@RyanParman刚刚看到了你的简历,所以我想我应该再解释一下!我完全理解CloudFront的工作方式(我自己也使用它)。我只是认为,在很多情况下,我认为允许您在不使CloudFront失效的情况下将新资源重新上传到S3是没有意义的,特别是S3和CF是分离的,但紧密集成的。由于S3有这个信息(“资源X已更改”),我的用例(为什么我要写这个问题)是希望它发送无效声明。我看到了您的用例,所以我想我们只是想将它用于不同的事情。但我确信我并不孤单。我当然可以把旗杆提升为S3和CulddFrand团队应该在未来的特性更新中考虑的东西。我现在就联系那些小组。谢谢谢谢你的回答。我对S3和CloudFront(以及其他)都很熟悉,我问的是这两个Amazon产品之间的具体集成。所以,是的–我的建议是,仍然对资产进行版本设置,并在对象上设置
Cache Control
头。谢谢,看起来我需要解决这个问题。我仍然认为这是他们错过的一个重要且易于实现的功能。