Node.js Can';t在AWS Lambda函数中运行ec2方法
我调用以下lambda函数来描述实例信息: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
'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您解决过这个问题吗?我也有同样的问题,但没有一个答案有帮助