AWS Lambda 公有子网 EIP 以提供互联网访问权限

dav*_*ons 5 networking amazon-web-services amazon-vpc aws-lambda

在抱怨允许附加到 VPC 的 lambda 函数访问互联网的 NAT 网关成本时,我发现了一些关于在公共子网而不是私有子网中部署 lambda 并将 EIP 附加到由 Lambda 创建的 ENI 的建议。(我也有一个连接到 VPC 的 IGW)。

我关注了这篇文章:/sf/answers/5227829771/

这有效!我在公共子网中运行的 lambda 可以访问互联网。

然而,我在很多地方读到“这不应该是可能的”,或者“为 lambda 提供互联网访问的唯一方法是通过 NAT 网关/实例。” 或“如果你这样做,它就无法正确扩展”。

这只是一个坏主意吗?我的 lambda 需要访问互联网和 VPC 中的资源(例如私有子网中的 rds)

kdg*_*ory 7

这是一个巧妙的技巧。2019 年 9 月发布的Lambda Hyperplane ENI使这一目标成为可能。在此之前,每个 VPC 内 Lambda 实例都需要自己的 ENI。之后,多个实例可以共享相同的 ENI。

扩展的限制是每个 ENI 都需要自己的弹性 IP,并且每个区域可以关联的弹性 IP 数量有限

这可能会导致问题的是子网和安全组的每个组合都需要自己的 ENI。如果您只是将“默认”安全组分配给所有 Lambda,那么每个子网将需要一个 ENI,并且可以轻松保持在配额之下。但是,在多应用程序环境中,您通常会创建多个安全组来控制应用程序内的通信(例如,允许来自一个 Lambda 但不允许来自另一个 Lambda 的入站连接的数据库 SG)。

您还应该注意,使用弹性 IP 时,您将需要支付 EC2 数据传输费用。进入 Lambda 的流量将免费,而流出 Lambda 的流量将按每 GB 0.09 美元(针对美国地区)收费,这低于通过 NAT 网关的流量。

底线:如果您只是为了个人帐户而这样做,那就继续吧。但在生产环境中,我认为总拥有成本(包括中断风险)将远远高于 NAT 网关。如果您确实不想为 AWS 管理的 NAT 付费,那么配置一个t3.micro实例来提供该功能并不困难。但请注意,您现在将面临保持其健康的责任。