我正在使用Node的aws-lib模块。我理解它是一个相当薄的节点API包装器,例如,运行调用(“CreateTags”)将包装API中记录的CreateTags调用。
我成功调用了其他API函数,例如,RunInstance和DescribeInstances工作正常。然而,CreateTags会导致问题:
ec2.call("CreateTags", {
'ResourceId.1':notmyrealresourceid,
'Tag.1.Key':'Name'
'Tag.1.Value':'Somemachine'
}, function(err, result){
if ( err) {
console.log('Failure tagging image');
console.log(err)
}
})
在错误中回复以下内容:
The action CreateTags is not valid for this web service.
API绝对提到CreateTags存在。我怎样才能使它工作?我错过了什么? 谢谢!
答案 0 :(得分:1)
这似乎源于Amazon EC2中可选的aws-lib API'版本'参数的可疑默认值,请参阅var ec2Client的当前主分支定义:
// Amazon EC2 API handler which is wrapped around the genericAWSClient
var ec2Client = function(obj) {
var aws = genericAWSClient({
host: obj.host, path: obj.path, accessKeyId: obj.accessKeyId,
secretAccessKey: obj.secretAccessKey, secure: obj.secure
});
obj.call = function(action, query, callback) {
query["Action"] = action
query["Version"] = obj.version || '2009-11-30'
query["SignatureMethod"] = "HmacSHA256"
query["SignatureVersion"] = "2"
return aws.call(action, query, callback);
}
return obj;
}
也就是说,所选的EC2 API版本默认为非常古老的'2009-11-30'(目前是'2012-04-01'),API版本'2010-08-31'中引入了标签支持仅限Release: Amazon EC2 on 2010-09-19 - 可通过Document History中的Amazon Elastic Compute Cloud API Reference获取与版本无关的概述。
因此,您只需要提供一个足够新的EC2 API版本,应该没问题。
答案 1 :(得分:1)
也...
确保您的任何参数中没有额外的非预期空格。例如
https://ec2.amazonaws.com/?Action=RunInstances&ImageId=ami-7ba91a12&MaxCount=3&MinCount=1&Placement.AvailabilityZone=us-east-1b&Monitoring.Enabled=true&AWSAccessKeyId=AKIAJTLX2WXU44OXMBKQ&Version=2012-07-20& Timestamp = 2012-09-19T21:07:32& SignatureVersion = 2& SignatureMethod = HmacSHA256& Signature = XXXXXXXXXXXXXXXXXXXXX
或者您将收到该错误消息。除了版本之外,即使其他参数中的空格也会出现此错误。
您可以在此网站上找到最新版本的ec2工具。 http://aws.amazon.com/developertools/351