如何更新亚马逊CDN(CloudFront)上的文件?

时间:2009-07-06 09:44:34

标签: amazon-s3 amazon-web-services cloud cdn amazon-cloudfront

有没有办法更新存储在Amazon CloudFront(亚马逊的CDN服务)上的文件? 似乎它不会对我们制作的文件进行任何更新(例如,删除文件并使用与以前相同的文件名存储新文件)。 我是否必须明确触发更新过程以从边缘服务器中删除文件以获取新文件内容?

感谢您的帮助

10 个答案:

答案 0 :(得分:17)

以下是使用CloudFront控制面板的方法。

  1. 从服务列表中选择CloudFront。
  2. 确保选中左上角的分布
  3. 然后从列表中单击相关分发的链接(在id下)。
  4. enter image description here

    1. 选择无效标签。
    2. 点击创建无效按钮,然后输入要使其无效(更新)的文件的位置。
    3. 例如:

      enter image description here

      1. 然后点击无效按钮,您现在应该会看到状态下的 InProgress
      2. enter image description here

          

        通常需要10到15分钟才能完成失效   请求,具体取决于您的请求大小。

        说完后你就可以了。

        提示 如果您回来并且需要使相同文件无效,则使用选择框创建一些失效后,复制链接将变得可用,从而使其更快。

答案 1 :(得分:12)

亚马逊添加了失效功能。 This is API Reference

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>

答案 2 :(得分:2)

答案 3 :(得分:1)

我似乎记得已经在服务器故障上看过这个,但是答案就是这样:

通过“亚马逊CDN”,我认为你的意思是“CloudFront”?

它已缓存,因此如果您现在需要更新它(而不是“新版本将在24小时内显示”),您将不得不选择一个新名称。而不是“logo.png”,使用“logo.png - 0”,然后使用“logo.png - 1”更新它,并将您的html更改为指向该位置。

没有办法“冲洗”亚马逊云端。

修改:此 不可能,现在是。请参阅此回复的评论。

答案 4 :(得分:1)

下载Cloudberry Explorer免费软件版本以在单个文件上执行此操作: http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html

答案 5 :(得分:1)

Cyber​​duck for Mac&amp; Windows为对象失效提供了用户界面。请参阅http://trac.cyberduck.ch/wiki/help/en/howto/cloudfront

答案 6 :(得分:1)

CloudFront的用户界面在[i]按钮&gt;下提供此功能。 “分发设置”,“无效”标签:https://console.aws.amazon.com/cloudfront/home#distribution-settings

答案 7 :(得分:1)

在红宝石中,使用雾宝石

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分钟才能在所有亚马逊边缘服务器上处理和刷新失效

答案 8 :(得分:0)

WinF,Mac和Linux的CrossFTP为CloudFront失效提供了用户界面,请查看此内容以获取更多详细信息:http://crossftp.blogspot.com/2013/07/cloudfront-invalidation-with-crossftp.html

答案 9 :(得分:0)

我将总结可能的解决方案。

案例 1:一次性更新:使用控制台 UI。

您可以按照 @CoalaWeb 的 answer 手动浏览控制台的 UI,并在 CloudFront 上启动“失效”,通常不到一分钟即可完成。只需单击一下。

此外,您可以在 UI 中手动更新它在 S3 中指向的路径。

案例 2:频繁更新,在 S3 中的同一路径上:使用 AWS CLI。

您可以使用 AWS CLI 通过命令行简单地运行上述内容。

命令是:

    aws cloudfront create-invalidation --distribution-id E1234567890 --paths "/*"

E1234567890 部分替换为您可以在控制台中看到的 DistributionId。您还可以将其限制为某些文件,而不是所有文件的 /*

可以在 this answer 中找到如何将其放入 package.json 以作为目标的 Node/JavaScript 项目的示例。 (不同的问题)

注意事项:

  • 我相信现在(2021 年 4 月)每月前 1000 次失效是免费的。
  • 执行 AWS CLI 失效的用户应在 IAM 中拥有 CreateInvalidation 访问权限。 (以下案例中的示例。)

案例 3:频繁更新,S3 上的路径每次都改变:使用手动脚本。

如果您在 S3 中存储不同版本的文件(即路径包含文件/工件的版本 ID)并且您需要每次在 CloudFront 中更改它,您需要编写一个脚本来执行该操作。

遗憾的是,适用于 CloudFront 的 AWS CLI 不允许您使用一个命令轻松更新路径。你需要一个详细的脚本。我写了一个,在this answer中有详细信息。 (不同的问题)