17

我知道 cloudfront 提供了一种使文件无效的机制,但是如果我想使特定文件夹中的所有文件无效怎么办?文档提到我不能使用通配符来做到这一点。

以下是从官方文档中获取的说明:

您必须明确使您希望 CloudFront 停止服务的每个对象和每个目录无效。您不能使用通配符使对象组无效,也不能通过指定目录路径使目录中的所有对象无效。

4

3 回答 3

23

早在 2013 年,在这个答案的前一个版本中,我写道:

您不能这样做,因为云端的“文件”不在“文件夹”中。一切都是对象,每个对象都是独立的。

在当时,这是完全正确的。一切都是对象,每个对象都是独立的,这仍然是事实,但 CloudFront 改变了它的失效逻辑。继续阅读。

这在当时也是如此,而且在某种程度上,它仍然是:

云端文档提到“使目录无效”,但这指的是实际上允许目录列表的网站[当]列表是您想要使无效的内容时,所以这也对您没有帮助。

然而,时代已经发生了巨大变化。

从技术上讲,每个对象仍然是独立的,CloudFront 并没有真正将它们存储在分层文件夹中,但失效接口得到了增强,以支持左锚通配符匹配。您可以使“文件夹”的内容或您可以与字符串末尾的通配符匹配的任意数量的对象无效。任何匹配的东西都将从缓存中清除:

要使对象无效,您可以指定单个对象的路径或以*通配符结尾的路径,这可能适用于一个或多个对象,如以下示例所示:

/images/image1.jpg

/images/image*

/images/*

—  http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

不错的增强。但是有什么问题吗?

除了在正常操作下失效需要 - 一如既往 - 10 到 15 分钟才能完成之外,答案是否定的,没有真正的问题。您在一个月内提交的前 1,000 个失效路径(以前的“请求”和“请求”针对单个对象)是免费的;之后,需要收费,但是:

无论您是使单个对象无效还是使用 * 通配符使多个对象无效,价格都是相同的。

—  http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#PayingForInvalidation

请注意,如果您最后不包含*,那么/images/(例如)的失效只会告诉 CloudFront 使您的源服务器为请求返回的任何单个对象无效/images/

前导斜杠被记录为可选。

于 2013-06-20T01:27:59.973 回答
10

自 2015 年 5 月 25 日起,您可以使用通配符使之无效。例如:/*/images/*

这样做的成本也低得多,因为类似的东西/images/*被视为一个无效对象,而不是为 /images 目录中的数千张图像收费。

http://aws.amazon.com/about-aws/whats-new/2015/05/amazon-cloudfront-makes-it-easier-to-invalidate-multiple-objects/

于 2015-06-04T17:57:47.613 回答
7

只要您想使合理数量的对象无效,我发现的一种更简单的方法是在Cyber​​duck中选择对象,右键单击>选择Info并单击Distribution选项卡,您可以从那里使对象无效。Cyber​​duck 将向您的 Cloudfront 提交一份无效请求,其中包含所选文件的列表。

Cyber​​duck 也是开源的。

在此处输入图像描述

ps:与产品没有任何关联。只是列出一个替代方案。

于 2014-09-09T09:54:40.137 回答