Amazon S3和Cloudfrontcaching,如何清除caching或同步caching

我有一个每10分钟运行一次的cron作业,并更新内容types和x-amz-meta。 但从昨天开始,似乎在cron作业运行之后,亚马逊并没有完成所做的更改(刷新其caching)。

我甚至去做了手动的变化,但没有改变…

当video上传时,它具有application/x-mp4内容types,并且cron作业将其更改为video/mp4

虽然S3有正确的内容types的video/mp4云端显示application/x-mp4 (旧内容types)….

cron工作在过去的6个月里一直没有问题。

亚马逊caching有什么问题? 我如何同步caching?

使用Invalidations来清除caching,你可以把你想要清除的文件的path,或者只是使用通配符来清除所有的东西。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#invalidating-objects-api

这也可以使用API​​来完成! http://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html

AWS PHP SDK现在具有这些方法,但是如果您想使用更轻的方法,请查看此库: http : //www.subchild.com/2010/09/17/amazon-cloudfront-php-invalidator/

user3305600的解决scheme不起作用,因为将其设置为零等同于使用原始高速caching头。

至于实际的代码

获取您的CloudFront分配ID

aws cloudfront list-distributions

使发行版中的所有文件失效,CloudFront将获取最新的文件

aws cloudfront create-invalidation --distribution-id=S11A16G5KZMEQD --paths /

我的实际完整版本脚本是

 #!/usr/bin/env bash BUCKET=mysite.com SOURCE_DIR=dist/ export AWS_ACCESS_KEY_ID=xxxxxxxxxxx export AWS_SECRET_ACCESS_KEY=xxxxxxxxx export AWS_DEFAULT_REGION=eu-west-1 echo "Building production" if npm run build:prod ; then echo "Build Successful" else echo "exiting.." exit 1 fi echo "Removing all files on bucket" aws s3 rm s3://${BUCKET} --recursive echo "Attempting to upload site .." echo "Command: aws s3 sync $SOURCE_DIR s3://$BUCKET/" aws s3 sync ${SOURCE_DIR} s3://${BUCKET}/ echo "S3 Upload complete" echo "Invalidating cloudfrond distribution to get fresh cache" aws cloudfront create-invalidation --distribution-id=S11A16G5KZMEQD --paths / --profile=myawsprofile echo "Deployment complete" 

参考

http://docs.aws.amazon.com/cli/latest/reference/cloudfront/get-invalidation.html

http://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html

S3不是用于实时开发,但如果你真的想testing你刚部署的网站使用

 index.html 

在最后添加一个版本参数将使文件的caching版本无效,浏览器将从服务器存储桶中获取新的文件副本

Cloudfront将caching文件/对象,直到caching过期。 默认情况下是24小时。 如果您已将此值更改为较大的值,则需要更长的时间。

如果您随时需要强制清除caching,请使用无效 。 它是单独收费的。

另一个select是更改URL(对象键),所以它总是提取新的对象。

不要使用失效。 他们不能退还,你将被控告。 他们只是为我工作是减lessTTL和等待。

问候

如果您正在寻找使caching无效的最小解决scheme,那么曼哈顿博士解决scheme的编辑版本应该足够了。 请注意,我指定的根/目录,以表明我希望整个网站刷新。

 export AWS_ACCESS_KEY_ID=<Key> export AWS_SECRET_ACCESS_KEY=<Secret> export AWS_DEFAULT_REGION=eu-west-1 echo "Invalidating cloudfrond distribution to get fresh cache" aws cloudfront create-invalidation --distribution-id=<distributionId> --paths / --profile=<awsprofile> 

地区代码可以在这里find

您还需要使用aws cli创buildconfiguration文件。 使用aws configure --profile选项。 以下是来自Amazon的示例代码片段。

 $ aws configure --profile user2 AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY Default region name [None]: us-east-1 Default output format [None]: text 

(编辑:不起作用)从2014年开始,您可以随时清除caching,请仔细阅读文档或转至您的分发设置>行为>编辑

对象caching使用( 原始caching头自定义

最小TTL = 0

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html