节点AWS-lib:重复调用AWS-lib会导致签名错误

时间:2012-05-08 09:38:44

标签: node.js amazon-ec2 amazon-web-services aws-lib

我正在重复运行相同的EC2 API调用,因为我等待实例启动。

var check_started = function() {
  console.log('Calling');
  ec2.call("DescribeInstanceStatus", {InstanceId:['pretend_instance_id']}, function(err, status_result){
    if (err) {
      console.log('error')
      console.log(err)
      console.log(status_result)
    } else {
      console.log('success')
    }
  }); 
}

var instance_started_checker = setInterval( check_started, 5 * 1000)

第一个电话始终成功,但后续电话会失败并显示:

The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

我可以做些什么来重复调用?

1 个答案:

答案 0 :(得分:2)

我认为如果您在创建代理的选项中指定API版本可能会有所帮助。像这样:

var ec2 = aws.createEC2Client(yourAccessKeyId, yourSecretAccessKey, {
        version: "2012-04-01"
    }
);

我尝试了您的代码,但无法重现相同的错误。当我没有指定API版本时,我得到'InvalidAction'。这是我使用的代码:

var aws = require("aws-lib");
var ec2 = aws.createEC2Client("xXx", "yYy", {
    secure: "https",
    host: "ec2.eu-west-1.amazonaws.com",
    version: "2012-04-01"
}
);
var check_started = function() {
console.log('Calling');
ec2.call("DescribeInstanceStatus", {InstanceId:["i-abcdefg"]}, function(err, status_result) {
    if (err) {
      console.log('error')
      console.log(err)
      console.log(status_result)
    } else {
      console.log('success')
      console.log(status_result.instanceStatusSet)
      clearInterval(instance_started_checker);
    }
});
}
var instance_started_checker = setInterval( check_started, 5 * 1000);

出于好奇,你在调用DescribeInstances时遇到了同样的错误吗?