亚马逊云前哨版本控制 'index.html'

13

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

所有都很好,除了...

如何让CloudFront立即使所有边缘位置无效化“index.html”,而不是每次发布都编写新的作废请求?

谢谢!


如果您不想使其无效,每个版本都可以将index.html进行版本控制。在这种情况下,在每个版本发布时,您的负载均衡器或代理需要指向新的index.html。我只会对index.html调用invalidate,并更新所有其他UI资源的版本,而不是做所有这些麻烦事。 - Dhananjay
1
您可以配置Jenkins使用AWS CLI调用CloudFront来使index.html文件无效。请参考https://docs.aws.amazon.com/cli/latest/reference/cloudfront/create-invalidation.html。 - JaredHatfield
@EarlD 你是怎么解决的? - carpamon
我没有解决它。我只是使用AWS CLI在每次成功构建我的应用程序后创建了一个使其失效的操作。 - EarlD
请看我这里的回答 - Dmitry Efimenko
1个回答

4

以下是您可以通过编程完成的方法。这应该是您部署脚本的一部分。由于我们已经通过文件名进行版本控制,因此我们只会使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

1
您不需要将/index.html指定为项目吗?非常棒的帖子,谢谢。 - Learner
@Learner 这个由 Items: ['/'] 处理。 - amit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接