节点AWS-lib:对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. 

我可以做些什么来使重复的呼叫工作?

如果您在创build代理的选项中指定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的错误?