2

我正在使用 Node 的aws-lib模块。我知道它是围绕节点 API 的一个相当薄的包装器,例如运行 call("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)
  }
}) 

在 err 中响应以下内容:

The action CreateTags is not valid for this web service.

API 明确提到 CreateTags 存在。我怎样才能让它工作?我错过了什么?谢谢!

4

2 回答 2

2

这似乎源于aws-lib中可选的Amazon EC2 API 'version' 参数的可疑默认值,请参阅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”中引入了标签支持(参见发布:Amazon EC2 于 2010年 9 月 19 日 - 通过Amazon Elastic Compute Cloud API 参考中的文档历史提供版本独立概述)。

因此,您只需要提供足够新的 EC2 API 版本就可以了。

于 2012-05-03T19:22:41.617 回答
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

于 2012-09-20T01:09:33.410 回答