我有一个AngularJS应用程序部署在S3和CloudFront中。我的Grunt和Jenkins构建过程包括一个FileRev步骤,用于为每个新版本的脚本和厂商JS文件命名。 最后,FileRev还更新了我的'index.html'页面标记,以引用脚本和供应商文件的最新版本。
所有都很好,除了...
如何让CloudFront立即使所有边缘位置无效化“index.html”,而不是每次发布都编写新的作废请求?
谢谢!
我有一个AngularJS应用程序部署在S3和CloudFront中。我的Grunt和Jenkins构建过程包括一个FileRev步骤,用于为每个新版本的脚本和厂商JS文件命名。 最后,FileRev还更新了我的'index.html'页面标记,以引用脚本和供应商文件的最新版本。
所有都很好,除了...
如何让CloudFront立即使所有边缘位置无效化“index.html”,而不是每次发布都编写新的作废请求?
谢谢!
以下是您可以通过编程完成的方法。这应该是您部署脚本的一部分。由于我们已经通过文件名进行版本控制,因此我们只会使index.html
失效:
const aws = require('aws-sdk')
function invalidateIndex () {
const client = new aws.CloudFront({
accessKeyId: process.env.AWS_ACCESS_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
})
const invalidation = client.createInvalidation({
DistributionId: process.env.AWS_CLOUDFRONT_DISTRIBUTION_ID, /* required */
InvalidationBatch: {
/* required */
CallerReference: Date.now() + '', /* required - request ID given by you, any string is okay*/
Paths: {
/* required */
Quantity: 1, /* required */
Items: [
'/',
/* more items */
]
}
}
}, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log('Index was invalidated with invalidation id: ', data.Invalidation.Id); // successful response
})
}
invalidateIndex()
Items: ['/']
处理。 - amit