有什么方法可以更新存储在 Amazon CloudFront(Amazon 的 CDN 服务)上的文件?似乎它不会对我们制作的文件进行任何更新(例如删除文件并使用与以前相同的文件名存储新文件)。我是否必须显式触发更新过程以从边缘服务器中删除文件以发布新文件内容?
谢谢你的帮助
有什么方法可以更新存储在 Amazon CloudFront(Amazon 的 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>
我似乎记得已经在 serverfault 上看到了这个,但这是答案:
我认为“Amazon CDN”是指“CloudFront”?
它已缓存,因此如果您需要立即更新它(而不是“新版本将在 24 小时内可见”),您必须选择一个新名称。而不是“logo.png”,使用“logo.png--0”,然后使用“logo.png--1”更新它,并将你的html更改为指向它。
没有办法“冲洗”亚马逊云端。
编辑:这是不可能的,现在是。请参阅对此回复的评论。
下载 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。
CloudFront 的用户界面在 [i] 按钮 >“分发设置”,“无效”选项卡下提供此功能:https ://console.aws.amazon.com/cloudfront/home#distribution-settings
在红宝石中,使用雾宝石
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
即使失效,在所有亚马逊边缘服务器上处理和刷新失效仍然需要 5-10 分钟
适用于 Win、Mac 和 Linux 的 CrossFTP 为 CloudFront 失效提供了用户界面,请查看此处了解更多详细信息:http ://crossftp.blogspot.com/2013/07/cloudfront-invalidation-with-crossftp.html
我将总结可能的解决方案。
您可以根据@CoalaWeb 的回答手动浏览控制台的 UI,并在 CloudFront 上启动“失效”,通常只需不到一分钟即可完成。只需单击一下。
此外,您可以在 UI 中手动更新它在 S3 中指向的路径。
您可以使用 AWS CLI 通过命令行简单地运行上述内容。
命令是:
aws cloudfront create-invalidation --distribution-id E1234567890 --paths "/*"
将该部分替换为E1234567890
您可以在控制台中看到的 DistributionId。您还可以将其限制为某些文件而不是/*
所有文件。
可以在此答案中找到如何将其package.json
作为目标放入 Node/JavaScript 项目的示例。(不同的问题)
笔记:
CreateInvalidation
访问 IAM。(以下案例中的示例。)如果您在 S3 中存储文件的不同版本(即路径包含文件/工件的版本 ID)并且您每次都需要在 CloudFront 中更改它,您需要编写一个脚本来执行该操作。
不幸的是,适用于 CloudFront 的 AWS CLI 不允许您使用一个命令轻松更新路径。你需要有一个详细的脚本。我写了一个,可以在这个答案中找到详细信息。(不同的问题)