【问题标题】:How can I update files on Amazon's CDN (CloudFront)?如何更新 Amazon 的 CDN (CloudFront) 上的文件?
【发布时间】:2010-11-08 08:17:12
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 请尝试在serverfault.com提出这个问题。
  • 2021 年(12 年后)更新到@AlanHaggaiAlavi,下面有很好的答案。 :)

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


【解决方案1】:

这是我使用 CloudFront 控制面板的方法。

  1. 从服务列表中选择 CloudFront。
  2. 确保选择左上角的Distributions
  3. 接下来单击列表中相关分发的链接(在 id 下)。

  1. 选择失效标签。
  2. 点击创建失效按钮并输入您想要失效(更新)的文件的位置。

例如:

  1. 然后点击 Invalidate 按钮,您现在应该会在状态下看到 InProgress

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

一旦显示完成,您就可以开始了。

提示: 一旦您创建了一些失效,如果您返回并需要使相同的文件失效,请使用选择框,复制链接将变为可用,使其更快。

【讨论】:

  • 注意:在上传新文件之前,您必须使缓存的文件无效。当我上传修订时,我无法将更新的文件推送出去,然后使旧缓存失效。
  • 我实际上发现了相反的情况,我确保上传我的新文件,然后运行失效。
【解决方案2】:

亚马逊添加了失效功能。 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>

【讨论】:

    【解决方案3】:

    【讨论】:

    • 在哪里指定?
    • 您可以在“行为”选项卡下的云端分发详细信息中设置 TTL。启用“对象缓存”=“自定义”,您应该能够为分发设置默认值。短 TTL 在积极开发中是可以的,但如果更新不多,则应延长持续时间。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        我似乎记得在 serverfault 上看到过这个,但答案如下:

        我认为“Amazon CDN”是指“CloudFront”?

        它已被缓存,因此如果您需要立即更新它(而不是“新版本将在 24 小时内可见”),您必须选择一个新名称。代替“logo.png”,使用“logo.png--0”,然后使用“logo.png--1”更新它,并将你的html更改为指向它。

        没有办法“刷新”亚马逊云端。

        编辑:这以前不可能,现在可以了。请参阅此回复的 cmets。

        【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          在红宝石中,使用雾宝石

          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 分钟

          【讨论】:

            【解决方案9】:

            适用于 Win、Mac 和 Linux 的 CrossFTP 提供了 CloudFront 失效的用户界面,请查看此处了解更多详细信息:http://crossftp.blogspot.com/2013/07/cloudfront-invalidation-with-crossftp.html

            【讨论】:

              【解决方案10】:

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

              案例 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 中更改它,您需要编写一个脚本来执行该操作。

              不幸的是,AWS CLI for CloudFront 不允许您使用一个命令轻松更新路径。你需要有一个详细的脚本。我写了一篇,详情请见this answer。 (不同的问题)

              【讨论】:

                猜你喜欢
                • 2021-05-04
                • 1970-01-01
                • 2013-02-06
                • 2014-08-22
                • 2018-04-15
                • 1970-01-01
                • 2012-10-13
                • 2011-08-07
                • 1970-01-01
                相关资源
                最近更新 更多