Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何更新亚马逊CDN(CloudFront)上的文件?_Amazon S3_Amazon Web Services_Cloud_Cdn_Amazon Cloudfront - Fatal编程技术网

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

Amazon s3 如何更新亚马逊CDN(CloudFront)上的文件?,amazon-s3,amazon-web-services,cloud,cdn,amazon-cloudfront,Amazon S3,Amazon Web Services,Cloud,Cdn,Amazon Cloudfront,有没有办法更新存储在Amazon CloudFront的CDN服务上的文件? 似乎不需要对我们制作的文件进行任何更新,例如删除该文件并使用与以前相同的文件名存储新文件。 我是否必须显式触发更新过程以从边缘服务器删除文件以发布新的文件内容 感谢您的帮助我似乎记得在serverfault上已经看到了这一点,但下面是答案: 亚马逊CDN我想你指的是CloudFront 它是缓存的,所以如果您需要立即更新它,而不是在24小时内看到新版本,您必须选择一个新名称。使用logo.png-0代替logo.png

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


感谢您的帮助

我似乎记得在serverfault上已经看到了这一点,但下面是答案:

亚马逊CDN我想你指的是CloudFront

它是缓存的,所以如果您需要立即更新它,而不是在24小时内看到新版本,您必须选择一个新名称。使用logo.png-0代替logo.png,然后使用logo.png-1进行更新,并将html更改为指向logo.png-0

没有办法刷新amazon cloudfront


编辑:这是不可能的,现在是。请参阅此回复的注释。

设置TTL=1小时并替换


亚马逊增加了一个失效功能

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>

下载Cloudberry Explorer免费软件版本以在单个文件上执行此操作:

Cyberduck for Mac&Windows为对象失效提供了一个用户界面。请参阅。

CloudFront的用户界面在[i]按钮>分发设置、选项卡无效性下提供此功能:

在ruby中,使用fog gem

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

即使在失效时,在所有amazon边缘服务器上处理和刷新失效仍然需要5-10分钟。Win、Mac和Linux的CrossFTP为CloudFront失效提供了一个用户界面,请检查此项以了解更多详细信息:

以下是我如何使用CloudFront控制面板执行此操作

从服务列表中选择CloudFront。 确保选择了左上角的分布。 接下来单击id下列表中关联分发的链接。 选择“无效”选项卡。 单击“创建无效”按钮,然后输入要进行无效更新的文件的位置。 例如:

然后单击Invalidate按钮,您现在应该可以在status下看到InProgress。 通常需要10到15分钟来完成失效 请求,具体取决于请求的大小

一旦它说完成了,你就可以走了

提示:
一旦创建了一些无效文件,如果您回来需要使相同的文件无效,请使用选择框,复制链接将变得更快捷。

我将总结可能的解决方案

案例1:一次性更新:使用控制台UI。 您可以根据@CoalaWeb手动浏览控制台的UI,并在CloudFront上启动一个失效,通常不到一分钟即可完成。只需点击一下

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

案例2:频繁更新,在S3中的相同路径上:使用AWS CLI。 您可以使用AWS CLI通过命令行简单地运行上述内容

命令是:

aws cloudfront创建无效-分发id E1234567890-路径/* 将E1234567890零件更换为可以在控制台中看到的DistributionId。您还可以将此限制为某些文件,而不是所有文件的/*文件

有关如何将其作为目标放在节点/JavaScript项目的package.json中的示例,请参见。不同的问题

注:

我相信每个月的前1000次失效是免费的,现在是2021年4月。 执行AWS CLI无效化的用户应在IAM中具有CreateInvalization访问权限。下面的例子。 案例3:频繁更新,S3上的路径每次都会改变:使用手动脚本。 如果在S3中存储不同版本的文件,即路径包含文件/工件的版本id,并且每次都需要在CloudFront中更改该id,则需要编写脚本来执行该操作


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

请尝试在上问这个问题。12年后将2021更新为@Alanhagaalavi,下面有好的答案:如果这不是真的,您可以通过使cache@rsabir在评论之前,请阅读全文。您所说的内容已经在6年前添加。在哪里指定?您可以在cloudfront分发详细信息的“行为”选项卡下设置TTL。Enable Object Caching=Customize,您应该能够为分发设置默认值。在积极开发时,短TTL是可以的,但是如果没有太多更新,则持续时间应该延长。注意:在上载新文件之前,必须使缓存文件无效。当我上传修订版,然后使旧缓存失效时,我很难将更新后的文件推出。我确实发现了相反的情况,我确信会这样做 上传我的新文件,然后运行失效。