我知道cloudfront提供了一种使文件无效的机制,但是如果我想让特定文件夹中的所有文件无效怎么办?该文档提到我不能使用通配符来执行此操作。
以下是官方文件中的说明:
您必须明确地使希望CloudFront停止投放的每个对象和每个目录无效。您不能使用通配符使对象组无效,也不能通过指定目录路径使目录中的所有对象无效。
答案 0 :(得分:15)
早在2013年,在这个答案的先前版本中,我写道:
您无法执行此操作,因为cloudfront中的“文件”不在“文件夹”中。一切都是对象,每个对象都是独立的。
当时,这完全正确。仍然如此,一切都是对象,每个对象都是独立的,但CloudFront已经改变了它的失效逻辑。继续阅读。
当时,这也是事实,并且在某种程度上,它仍然是:
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/
的请求。
前导斜杠记录为可选。
答案 1 :(得分:8)
截至2015-05-25,您可以使用通配符无效。例如:/images/*
或{{1}}
这样做的成本也低得多,因为{{1}}之类的东西被视为失效的一个对象,而不是对/ images目录中的数千个图像收费。
PreserveReferencesHandling = PreserveReferencesHandling.Objects
答案 2 :(得分:6)
只要您想要使合理数量的对象无效,我找到的一种更简单的方法是在Cyberduck中选择对象,右键单击>
选择{{1然后点击Info
标签,您可以从那里失效。 Cyberduck将使用所选文件列表向您的Cloudfront提交一个无效请求。
Cyberduck也是开源的。
ps:不以任何方式与产品挂钩。只需列出替代方案。