【问题标题】:Node AWS-lib: CreateTags action 'not valid for the web service'节点 AWS-lib:CreateTags 操作“对 Web 服务无效”
【发布时间】:2012-09-20 09:09:33
【问题描述】:

我正在使用 Node 的 aws-lib 模块。我知道它是围绕节点 API 的一个相当薄的包装器,例如运行 call("CreateTags") 将包装 CreateTags 调用,如 API 中所述。

我已成功调用其他 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 存在。我怎样才能让它工作?我错过了什么? 谢谢!

【问题讨论】:

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


    【解决方案1】:

    这似乎源于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”中引入了标签支持仅限(请参阅Release: Amazon EC2 on 2010-09-19 - 可通过Document History 中的Amazon Elastic Compute Cloud API Reference 获得独立于版本的概述)。

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

    【讨论】:

    • 谢谢史蒂芬!我已通过在选项中指定我的较新版本来解决此问题:ec2 = aws.createEC2Client(access_key, secret_access_key, {'version':'2012-03-01'})
    【解决方案2】:

    还有……

    确保您的任何参数中都没有多余的空格。例如

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多