Amazon CloudFront版本控制'index.html'

时间:2015-07-23 15:32:07

标签: amazon-s3 amazon-cloudfront

我在S3&中部署了一个AngularJS应用程序。 CloudFront的。我的构建过程通过Grunt& Jenkins包含一个FileRev步骤,用于唯一地命名我的脚本的每个新版本。供应商JS文件。最后,FileRev还会更新我的'index.html'页面标签,以引用我的脚本和版本的最新版本版本。供应商文件。

一切都很好,除了......

如何让CloudFront在我的所有边缘位置立即使'index.html'无效,而不是以编程方式在每个版本上创建新的失效?

谢谢!

1 个答案:

答案 0 :(得分:2)

以下是以编程方式执行此操作的方法。这应该是部署脚本的一部分。我们只会使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()

您可以在此处阅读API文档中的更多内容:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront.html#createInvalidation-property