Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';t在AWS Lambda函数中运行ec2方法_Node.js_Amazon Web Services_Aws Sdk_Aws Lambda - Fatal编程技术网

Node.js Can';t在AWS Lambda函数中运行ec2方法

Node.js Can';t在AWS Lambda函数中运行ec2方法,node.js,amazon-web-services,aws-sdk,aws-lambda,Node.js,Amazon Web Services,Aws Sdk,Aws Lambda,我调用以下lambda函数来描述实例信息: 'use strict' var aws = require('aws-sdk'); exports.handler = function(event, context) { var instanceID = JSON.parse(event.Records[0].Sns.Message).Trigger.Dimensions[0].value; aws.config.region = 'us-east-1'; var

我调用以下lambda函数来描述实例信息:

'use strict'

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

exports.handler = function(event, context) {
    var instanceID = JSON.parse(event.Records[0].Sns.Message).Trigger.Dimensions[0].value;

    aws.config.region = 'us-east-1';

    var ec2 = new aws.EC2;

    var params = {InstanceIds: [instanceID]};

    ec2.describeInstances(params, function(e, data) {
        if (e)
            console.log(e, e.stack);
        else
            console.log(data);
    }
};
在CloudWatch日志中,我可以看到函数一直运行到最后,但在ec2.describeInstances方法中没有记录任何内容:

结束请求ID:XXXXXXXXXXXXX 报告请求ID:XXXXXXXXXXXXX持续时间:xx毫秒计费持续时间:xx毫秒内存大小:xx MB最大使用内存:xx MB


My lambda功能具有VPC访问权限和IAM管理员访问权限(完全访问权限)。由于某些原因,它无法运行ec2.DescripteBinstances方法。出现了什么问题以及如何修复?

当您将VPC配置添加到Lambda函数时,它只能访问该VPC中的资源。如果Lambda功能需要访问专有网络资源和公共互联网,则专有网络需要在专有网络内有一个网络地址转换(NAT)实例。因此,为了让EC2实例向cloud watch发送日志,它需要通过NAT实例进行互联网连接

AWS Lambda使用您提供的专有网络信息来设置允许您的Lambda功能访问专有网络资源的ENIs。每个ENI都从您指定的子网内的IP地址范围中分配了一个专用IP地址,但没有分配任何公共IP地址。因此,如果Lambda功能需要Internet访问(例如,访问没有VPC端点的AWS服务,如Amazon Cloudwatch),则可以在VPC内配置NAT实例,也可以使用Amazon VPC NAT网关。有关更多信息,请参阅《亚马逊专有网络用户指南》中的。您不能使用连接到VPC的Internet网关,因为这要求ENI具有公共IP地址。

首先,请尝试将其提供给您的Lambda

{
        "Effect": "Allow",
        "Resource": "*",
        "Action": [
            "ec2:DescribeInstances",
            "ec2:CreateNetworkInterface",
            "ec2:AttachNetworkInterface",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DeleteNetworkInterface",
            "ec2:DetachNetworkInterface",
            "ec2:ModifyNetworkInterfaceAttribute",
            "ec2:ResetNetworkInterfaceAttribute",
            "autoscaling:CompleteLifecycleAction"
        ]
    }
如果那没什么区别的话

  • 您需要创建一个ENI。转到“网络接口”页面和“创建网络接口”。选择适当的安全组和子网(例如s0bn3t)
  • 现在,在Lambda的“高级设置”中,当您选择VPC时,您将看到子网列表。现在,选择与上述ENI关联的子网('s0bn3t')

我认为应该这样做。

您的EC2实例是否位于专有网络中的私有子网中?是的,我的lambda函数在其配置中有此子网。您是否解决了此问题?我也有同样的问题,没有一个答案对你好有帮助。检查@error2007s的答案。我通过创建NAT的子网和具有出站连接的安全组(0.0.0.0/0和::/0)解决了这个问题。两者都是在lambda中配置的。我希望使用lambda函数在lambda配置的同一VPC中ssh一个ec2实例,而不是使用ec2方法并将其记录在CloudWatch中。是否需要配置NAT?我是否需要设置一个安全组以允许lambda连接到实例的端口22?您可以将SSH连接到实例中,而无需进行internet连接,即SSH只需要NAT。是的,您需要Lambda访问EC2 INSATNCE您解决过这个问题吗?我也有同样的问题,但没有一个答案有帮助