在我的 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
知道如何才能获取有关挂断位置的更多信息吗?
答案1
这是预料之中的。
VPC 中的 Lambda 函数无法使用 Internet 网关与 Internet(包括标准服务 API)通信,因为 Internet 网关要求内部设备具有关联的公共 IP 地址。位于公共子网(其中默认路由是 Internet 网关)是不够的。
重要的
如果您的 Lambda 函数需要 Internet 访问,请勿将其附加到没有 Internet 访问的公有子网或私有子网。相反,应仅将其附加到通过 NAT 实例或 Amazon VPC NAT 网关具有 Internet 访问权的私有子网。
NAT 设备——通常是NAT 网关-- 是必需的,除非相关服务支持VPC 终端节点(SES 目前没有)。
将 NAT 网关放在公共子网上(以便它可以使用 Internet 网关访问 Internet),然后创建一个或多个私有子网,并将其默认路由指向 NAT 网关。
NAT 网关是NAT 实例,这是一个专用于相同目的的 EC2 实例。以前,这是提供所需 NAT 服务的唯一方法。与由 AWS 管理且具有容错能力的 NAT 网关不同,NAT 实例代表潜在的单点故障(但相关成本较低)。
或者,如果 Lambda 函数不需要其他 VPC 资源,您可以将其移出 VPC。
网络 ACL 允许所有和拒绝所有都是正常的,因为规则是按顺序处理的。如果删除了允许规则,则最后一条规则是将应用的默认行为。它主要是视觉提示,提醒您为什么如果删除其他规则,NACL 不起作用。否则,用户可能会认为,既然他们没有明确拒绝某事,就应该允许它。
每个网络 ACL 还包含一个规则,其规则编号为星号。此规则确保如果数据包与任何其他编号规则都不匹配,则会被拒绝。您无法修改或删除此规则。
https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html