节点AWS-lib:CreateTags操作“对Web服务无效”

我正在使用Node的aws-lib模块。 我知道这是一个相当薄的节点API包装,例如运行调用(“CreateTags”)将包装在API中logging的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) } }) 

在err中回应以下内容:

 The action CreateTags is not valid for this web service. 

API绝对提到了CreateTags的存在。 我怎样才能使它工作? 我错过了什么? 谢谢!

这似乎源于aws-lib中的可选Amazon EC2 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”中引入(请参阅发布:2010年9月19日的Amazon EC2 – 独立于版本的概述可通过Amazon Elastic Compute Cloud API参考中的文档历史logging获得)。

因此,你只需要提供一个足够新的EC2 API版本,应该没问题。

也…

确保您的任何参数中没有额外的意外空间。 例如

https://ec2.amazonaws.com/?Action=RunInstances&ImageId=ami-7ba91a12&MaxCount=3&MinCount=1&Placement.AvailabilityZone=us–1-1&&Monitoring.Enabled=true&AWSAccessKeyId=AKIAJTLX2WXU44OXMBKQ&Version=2012-07-20&Timestamp = 2012-09-19T21: 07:32&SignatureVersion = 2&是SignatureMethod = HmacSHA256&签名= XXXXXXXXXXXXXXXXXXXXX

或者你会得到这个错误信息。 除了版本之外,其他参数中的空格都会导致这个错误。

你可以在这个网站find最新版本的ec2工具。 http://aws.amazon.com/developertools/351