调用跨帐户AWS EC2实例Lambda函数不起作用

时间:2016-05-09 15:53:40

标签: amazon-web-services aws-lambda

我使用Node.js设置Lambda函数,该函数将传递实例ID,然后通过调用“ec2.startInstances”启动该实例。

  • 我在里面硬编码了“accessKeyId,secretAccessKey和region” 功能。
  • 我在笔记本电脑上本地测试了“Node.js”代码,然后启动了 实例就好了。
  • 我在实例所在的帐户中测试了Lambda函数,它启动得很好。
  • 然后,我从另一个AWS账户测试了Lambda函数,其中AWS实例不存在,我收到一条错误,说它无法找到实例ID。

我很困惑为什么Lambda函数关心它当前正在执行的帐户,尤其是当我向具有我指定的实例的帐户声明正确的accesskeyid,secretaccesskey和region时。

此处的用例是拥有一个具有lambda函数的主帐户,该帐户可以调用不驻留在主帐户上的实例的启动或停止。

我已经阅读并看到了一些如何通过在帐户A和帐户B等上指定正确的IAM角色和权限来执行此操作的示例。但是,当您拥有数百或数千个帐户时,此解决方案将变得乏味。

我正在寻找一种使用Lambda的方法,就像我通过node.js或powershell等在笔记本电脑上本地使用AWS SDK一样。我只是不明白为什么要指定凭据另一个帐户对于Lambda来说还不够

以下是我正在使用的代码:

var AWS = require('aws-sdk'); 

exports.handler = function(event, context) {
    var instanceId = event.instanceid;
    AWS.config = new AWS.Config();
    AWS.config.accessKeyId = "accesskey";
    AWS.config.secretAccessKey = "secretkey";
    AWS.config.region = "us-west-2";

    var ec2 = new AWS.EC2();

    console.log('instanceid:' + instanceId);

    var params = {
      InstanceIds: [ 'i-sdakuyvsdx' ]
    };
    ec2.startInstances(params, function(err, data) {
      if (err) { context.fail(err); } 
      else { context.succeed(instanceId + ' successfully started.'); }           
    });
};

以下是我遇到的错误:

  

“errorMessage”:“实例ID'i-sdakuyvsdx'不存在”,     “errorType”:“InvalidInstanceID.NotFound”,

0 个答案:

没有答案