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

时间:2012-05-03 18:49:14

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

我正在使用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存在。我怎样才能使它工作?我错过了什么? 谢谢!

2 个答案:

答案 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