使Cloudfront控制台中的文件夹中的所有文件无效

时间:2013-06-17 13:43:46

标签: amazon-web-services amazon-cloudfront

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

以下是官方文件中的说明:

  

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

3 个答案:

答案 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个无效路径(以前称为“请求”和“请求”是针对单个对象)是免费的;之后,收费,但是:

  

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

     

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

请注意,如果您未在末尾添加*,则/images/的失效(例如) 告知CloudFront使任何单个对象无效您的原始服务器返回/images/的请求。

前导斜杠记录为可选。

答案 1 :(得分:8)

截至2015-05-25,您可以使用通配符无效。例如:/images/*或{{1}}

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

PreserveReferencesHandling = PreserveReferencesHandling.Objects

答案 2 :(得分:6)

只要您想要使合理数量的对象无效,我找到的一种更简单的方法是在Cyberduck中选择对象,右键单击>选择{{1然后点击Info标签,您可以从那里失效。 Cyber​​duck将使用所选文件列表向您的Cloudfront提交一个无效请求。

Cyber​​duck也是开源的。

enter image description here

ps:不以任何方式与产品挂钩。只需列出替代方案。