无法在AWS Lambda函数中运行ec2方法

我正在调用下面的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 Logs中,我可以看到该函数运行到结束,但ec2.describeInstances方法中没有logging任何内容:

END RequestId:xxxxxxxxxxxxxx REPORT RequestId:xxxxxxxxxxxxxx持续时间:xx ms计费时间:xx ms内存大小:xx MB使用的最大内存:xx MB

我的lambda函数具有VPC访问权限和AdministratorAccess的IAMangular色(完全访问权限)。 由于某些原因,它无法运行ec2.describeInstances方法。 什么是错的,我该如何解决?

将VPCconfiguration添加到Lambda函数时,只能访问该VPC中的资源。 如果Lambda函数需要访问VPC资源和公共Internet,则VPC需要在VPC内部有一个networking地址转换(NAT)实例。 因此,对于EC2实例发送日志到云看,它需要通过NAT实例的互联网连接。

AWS Lambda使用您提供的VPC信息设置允许您的Lambda函数访问VPC资源的ENI。 每个ENI都从您指定的子网中的IP地址范围分配一个私有IP地址,但未分配任何公共IP地址。 因此,如果您的Lambda函数需要Internet访问(例如,访问没有VPC端点的AWS服务(例如Amazon Cloudwatch)),则可以在VPC内部configurationNAT实例,或者使用Amazon VPC NAT网关。 有关更多信息,请参阅Amazon VPC用户指南中的NAT网关 。 您不能使用连接到您的VPC的Internet网关,因为这需要ENI拥有公共IP地址。

首先,试着把这个angular色给你的Lambda

 { "Effect": "Allow", "Resource": "*", "Action": [ "ec2:DescribeInstances", "ec2:CreateNetworkInterface", "ec2:AttachNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface", "ec2:DetachNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:ResetNetworkInterfaceAttribute", "autoscaling:CompleteLifecycleAction" ] } 

如果那样做没有什么不同的话,

我相信这应该做到这一点。