gpt4 book ai didi

node.js - 无法在 AWS Lambda 函数中运行 ec2 方法

转载 作者:搜寻专家 更新时间:2023-10-31 23:37:36 25 4
gpt4 key购买 nike

我正在调用以下 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 方法中没有记录任何内容:

结束 RequestId: xxxxxxxxxxxxxxREPORT RequestId:xxxxxxxxxxxxxx 持续时间:xx 毫秒计费持续时间:xx 毫秒内存大小:xx MB 使用的最大内存:xx MB

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

最佳答案

当您将 VPC 配置添加到 Lambda 函数时,它只能访问该 VPC 中的资源。如果 Lambda 函数需要同时访问 VPC 资源和公共(public) Internet,则 VPC 需要在 VPC 内部具有网络地址转换 (NAT) 实例。因此,要让该 EC2 实例将日志发送到云 watch ,它需要通过 NAT 实例连接互联网。

AWS Lambda 使用您提供的 VPC 信息来设置允许您的 Lambda 函数访问 VPC 资源的 ENI。每个 ENI 都会从您指定的子网内的 IP 地址范围内分配一个私有(private) IP 地址,但不会分配任何公共(public) IP 地址。因此,如果您的 Lambda 函数需要 Internet 访问(例如,访问没有 VPC 终端 Node 的 AWS 服务,例如 Amazon Cloudwatch),您可以在 VPC 内配置 NAT 实例,也可以使用 Amazon VPC NAT 网关。有关详细信息,请参阅 NAT Gateways在 Amazon VPC 用户指南中。您不能使用连接到您的 VPC 的 Internet 网关,因为这需要 ENI 具有公共(public) IP 地址。

关于node.js - 无法在 AWS Lambda 函数中运行 ec2 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com