我正在尝试使用以下代码执行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的文档声明您应该得到肯定/否定响应,但不会返回任何内容并且不会执行失效。
答案 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可以避免提交相同的请求,并且可以用作关键时间戳记