从 AWS Lambda 连接到 SMTP 服务器

iRy*_*ell 6 amazon-web-services amazon-ses amazon-vpc amazon-lambda

在我的 AWS Lambda 函数上,每当我尝试使用nodemailer连接到我的 Amazon SES SMTP 服务器(端口 465)时,我的 javascript 代码就会超时。但是,如果我在本地运行脚本,它工作正常,这让我相信它要么是 lambda 拨出到 SMTP 服务器的问题,要么是 SMTP 服务器阻止 lambda 连接 - 我怀疑前者是问题.

我在 Cloudfront 发行版后面使用了防火墙,但我认为这不适用于传入的 SES 连接或传出的 lambda 函数。在 VPC 中,我可以看到有一个附加到实例的 Internet 网关。安全组的传出连接允许所有协议访问 0.0.0.0/0,但是,ACL 看起来很奇怪,因为它既允许又拒绝所有入站/出站连接:

在此处输入图片说明

在此处输入图片说明

在 VPC 中,我看到列出了 6 个子网,我不太清楚这些子网在宏伟计划中的作用。

在此处输入图片说明

在日志中,我只看到 Task timed out after 6.01 seconds

知道如何获得有关挂断位置的更多信息吗?

Mic*_*bot 11

这是预期的。

VPC 中的 Lambda 函数无法使用 Internet 网关与 Internet(包括标准服务 API)通信,因为 Internet 网关要求内部设备具有关联的公共 IP 地址。位于公共子网(默认路由是 Internet 网关)上是不够的。

重要的

如果您的 Lambda 函数需要访问 Internet,请勿将其附加到公有子网或没有 Internet 访问权限的私有子网。相反,仅将其附加到通过 NAT 实例或 Amazon VPC NAT 网关访问 Internet 的私有子网。

https://docs.aws.amazon.com/lambda/latest/dg/vpc.html

NAT 设备(通常是NAT 网关)是必需的,除非相关服务支持VPC 端点(SES 当前不支持)。

将 NAT 网关置于公共子网(以便它可以使用 Internet 网关访问 Internet),然后创建一个或多个私有子网,将其默认路由指向 NAT 网关。

NAT 网关是NAT Instance的较新替代品,NAT Instance是专用于相同目的的 EC2 实例。这以前是提供所需 NAT 服务的唯一方法。与由 AWS 管理且具有容错能力的 NAT 网关不同,NAT 实例代表潜在的单点故障(但相关成本较低)。

或者,如果 Lambda 函数不需要其他 VPC 资源,您可以将它移出 VPC。

允许所有和拒绝所有的网络 ACL 都是正常的,因为规则是按顺序处理的。最后一条规则是如果删除允许规则将应用的默认行为。这主要是一个视觉提示,提醒您如果删除其他规则,为什么 NACL 不起作用。否则,用户可能会假设,由于他们没有明确拒绝某事,因此应该允许它。

每个网络 ACL 还包括一个规则,其规则编号是一个星号。此规则可确保如果数据包与任何其他编号规则不匹配,则会被拒绝。您无法修改或删除此规则。

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html