有没有方法可以更新存储在Amazon CloudFront(亚马逊的CDN服务)上的文件?似乎它不会接受我们所做的任何文件更新(例如删除文件并将新文件存储为以前相同的文件名)。我是否必须显式地触发更新进程以从边缘服务器中删除文件,以便发布新文件内容?
谢谢您的帮助。
有没有方法可以更新存储在Amazon CloudFront(亚马逊的CDN服务)上的文件?似乎它不会接受我们所做的任何文件更新(例如删除文件并将新文件存储为以前相同的文件名)。我是否必须显式地触发更新进程以从边缘服务器中删除文件,以便发布新文件内容?
谢谢您的帮助。
以下是我使用CloudFront控制面板的方法。
例如:
通常需要10至15分钟完成您的失效请求,具体取决于请求的大小。
一旦它说已完成,您就可以开始使用它了。
提示: 一旦您创建了一些失效请求,如果您回来需要使同一文件失效,请使用选择框,然后复制 链接将变为可用,使其更快。
亚马逊增加了一个无效化功能。 这是API参考。
API参考中的示例请求:
POST /2010-08-01/distribution/[distribution ID]/invalidation HTTP/1.0
Host: cloudfront.amazonaws.com
Authorization: [AWS authentication string]
Content-Type: text/xml
<InvalidationBatch>
<Path>/image1.jpg</Path>
<Path>/image2.jpg</Path>
<Path>/videos/movie.flv</Path>
<CallerReference>my-batch</CallerReference>
</InvalidationBatch>
AWS_ACCESS_KEY = ENV['AWS_ACCESS_KEY_ID']
AWS_SECRET_KEY = ENV['AWS_SECRET_ACCESS_KEY']
AWS_DISTRIBUTION_ID = ENV['AWS_DISTRIBUTION_ID']
conn = Fog::CDN.new(
:provider => 'AWS',
:aws_access_key_id => AWS_ACCESS_KEY,
:aws_secret_access_key => AWS_SECRET_KEY
)
images = ['/path/to/image1.jpg', '/path/to/another/image2.jpg']
conn.post_invalidation AWS_DISTRIBUTION_ID, images
下载Cloudberry Explorer免费版本以在单个文件上执行此操作: http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html
Cyberduck for Mac和Windows提供了一个对象失效的用户界面。请参考http://trac.cyberduck.ch/wiki/help/en/howto/cloudfront。
我好像记得在serverfault上已经看到过这个问题的答案:
你说的"Amazon CDN"是指"CloudFront"吗?
它是有缓存的,所以如果你需要立即更新它(而不是等待24小时后新版本可见),你就必须选择一个新的名称。比如用"logo.png--0"代替"logo.png",然后使用"logo.png--1"来更新它,并修改你的HTML代码指向它。
没有办法"刷新"亚马逊云前端。
编辑:以前是不可能的,现在可以了。请参考对此回复的评论。
CloudFront的用户界面在[i]按钮下提供此功能 > “分发设置”,选项卡“无效化”:https://console.aws.amazon.com/cloudfront/home#distribution-settings
我将总结可能的解决方案。
您可以按照@CoalaWeb的答案手动浏览控制台的UI,并在CloudFront上启动“作废”,通常不到一分钟即可完成。这是一个单击操作。
此外,您还可以在UI中手动更新它指向的S3路径。
您可以使用AWS CLI通过命令行简单地运行上述操作。
命令如下:
aws cloudfront create-invalidation --distribution-id E1234567890 --paths "/*"
将代码中的 E1234567890
替换为您在控制台中看到的 DistributionId。您还可以将其限制为某些文件,而不是对于所有文件均使用 /*
。
如何在 Node/JavaScript 项目中使用 package.json
作为目标的示例可在 this answer 中找到。(不同问题)
注:
CreateInvalidation
访问权限。(以下案例为例。)如果您正在在 S3 中存储文件/工件的不同版本(即路径包含文件/工件的版本 ID),并且每次需要在 CloudFront 中更改它,则需要编写一个脚本来执行此操作。
很遗憾,AWS CLI for CloudFront 不允许您使用一个命令轻松更新路径。您需要有一个详细的脚本。我写了一个,其中包含详细信息,请参见this answer(不同的问题)。