我知道 cloudfront 提供了一种使文件无效的机制,但是如果我想使特定文件夹中的所有文件无效怎么办?文档提到我不能使用通配符来做到这一点。
以下是从官方文档中获取的说明:
您必须明确使您希望 CloudFront 停止服务的每个对象和每个目录无效。您不能使用通配符使对象组无效,也不能通过指定目录路径使目录中的所有对象无效。
我知道 cloudfront 提供了一种使文件无效的机制,但是如果我想使特定文件夹中的所有文件无效怎么办?文档提到我不能使用通配符来做到这一点。
以下是从官方文档中获取的说明:
您必须明确使您希望 CloudFront 停止服务的每个对象和每个目录无效。您不能使用通配符使对象组无效,也不能通过指定目录路径使目录中的所有对象无效。
早在 2013 年,在这个答案的前一个版本中,我写道:
您不能这样做,因为云端的“文件”不在“文件夹”中。一切都是对象,每个对象都是独立的。
在当时,这是完全正确的。一切都是对象,每个对象都是独立的,这仍然是事实,但 CloudFront 改变了它的失效逻辑。继续阅读。
这在当时也是如此,而且在某种程度上,它仍然是:
云端文档提到“使目录无效”,但这指的是实际上允许目录列表的网站[当]列表是您想要使无效的内容时,所以这也对您没有帮助。
然而,时代已经发生了巨大变化。
从技术上讲,每个对象仍然是独立的,CloudFront 并没有真正将它们存储在分层文件夹中,但失效接口得到了增强,以支持左锚通配符匹配。您可以使“文件夹”的内容或您可以与字符串末尾的通配符匹配的任意数量的对象无效。任何匹配的东西都将从缓存中清除:
要使对象无效,您可以指定单个对象的路径或以
*
通配符结尾的路径,这可能适用于一个或多个对象,如以下示例所示:
/images/image1.jpg
/images/image*
/images/*
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html
不错的增强。但是有什么问题吗?
除了在正常操作下失效需要 - 一如既往 - 10 到 15 分钟才能完成之外,答案是否定的,没有真正的问题。您在一个月内提交的前 1,000 个失效路径(以前的“请求”和“请求”针对单个对象)是免费的;之后,需要收费,但是:
无论您是使单个对象无效还是使用 * 通配符使多个对象无效,价格都是相同的。
请注意,如果您最后不包含*
,那么/images/
(例如)的失效只会告诉 CloudFront 使您的源服务器为请求返回的任何单个对象无效/images/
。
前导斜杠被记录为可选。
自 2015 年 5 月 25 日起,您可以使用通配符使之无效。例如:/*
或/images/*
这样做的成本也低得多,因为类似的东西/images/*
被视为一个无效对象,而不是为 /images 目录中的数千张图像收费。
只要您想使合理数量的对象无效,我发现的一种更简单的方法是在Cyberduck中选择对象,右键单击>
选择Info
并单击Distribution
选项卡,您可以从那里使对象无效。Cyberduck 将向您的 Cloudfront 提交一份无效请求,其中包含所选文件的列表。
Cyberduck 也是开源的。
ps:与产品没有任何关联。只是列出一个替代方案。