AWS Cloudfront createInvalidation

时间:2017-07-20 18:31:38

标签: amazon-web-services amazon-cloudfront

我正在尝试使用以下代码执行cloudfront失效:

var cloudfront = new AWS.CloudFront({s3BucketEndpoint: <String Bucketname>});
        var params = {
            DistributionId: <String ID>,
            InvalidationBatch: {
                CallerReference: 'Cloudfront Invalidation',
                Paths: {
                    Quantity: 1,
                    Items: [
                        '/*'
                    ]
                }
            }
        };
        cloudfront.createInvalidation(params, function(err, data){
            if (err) console.log(err, err.stack); // an error occurred
            else     console.log(data);           // successful response
        });

但是,我在err或data的createInvalidation函数中没有得到任何响应。 aws sdk的文档声明您应该得到肯定/否定响应,但不会返回任何内容并且不会执行失效。

2 个答案:

答案 0 :(得分:2)

可能是您的CallerReference,在JavaScript aws-sdk docs(docs.aws.amazon.com)中,它表示需要唯一标识无效请求。

我偶然发现这个问题试图做你正在做的事情,我能够让createInvalidation使用以下代码:

var cloudfront = new AWS.CloudFront();

var params = {
  DistributionId: <String ID>,
  InvalidationBatch: {
    CallerReference: Date.now().toString(),
    Paths: {
      Quantity: 1,
      Items: [
        '/*'
      ]
    }
  }
};

cloudfront.createInvalidation(params, function(err, data) {
  if (err) console.log(err, err.stack);
  else     console.log('Data: ' + JSON.stringify(data));
});

使用Date.now().toString()会给出一个时间戳字符串,该字符串在运行此代码时是唯一的。

使用上面的代码,我得到了一个输出(相当格式化json之后):

Data: {
  "Location": "https://cloudfront.amazonaws.com/2017-03-25/distribution/<String ID>/invalidation/<String ID>",
  "Invalidation": {
    "Id": "<String ID>",
    "Status": "InProgress",
    "CreateTime": "<Timestamp>",
    "InvalidationBatch": {
      "Paths": {
        "Quantity": 1,
        "Items": [
          "/*"
        ]
      },
      "CallerReference": "<Timestamp>"
    }
  }
}

答案 1 :(得分:0)

参数“ callerreference”必须唯一,这样awss3可以避免提交相同的请求,并且可以用作关键时间戳记