有没有办法在没有 VPC 的情况下将静态 IP 分配给 AWS Lambda?

Is there a way to assign a Static IP to a AWS Lambda without VPC?

我希望为通过 API 网关调用的 Lambda 分配一个静态 IP。这是必需的,因为我从此 lambda 调用的下游系统仅接受来自白名单 IP 的 Web 请求。

我通过与我的 lambda 关联的 VPC 成功地实现了这一点。但是 VPC 引入了糟糕的冷启动时间,有时范围为 12-16 秒。所以我正在寻找一种方法来防止从 VPC 冷启动,但同时为 lambda 分配一个静态 IP。

您无法将 public/static IP 分配给 任何 Lambda 函数。

您唯一的好选择是部署到具有 Internet 网关的 VPC 中,并通过具有弹性 IP 的 NAT 配置从 Lambda 子网的路由。然后您的目标主机可以将弹性 IP 列入白名单。

另见:

您将需要:

  • 使用互联网网关、public 子网和私有子网
  • 创建一个 VPC
  • A​​WS Lambda 函数 附加到私有子网
  • 在 public 子网中启动 NAT 网关 并更新私有子网的路由 Table 以使用 NAT 网关

NAT 网关将使用弹性 IP 地址(这是一个静态 IP 地址)。从Lambda函数到互联网的所有流量都将来自这个IP地址,可以在白名单中使用。

您可能认为这对于简单地附加一个静态 IP 地址来说有点矫枉过正,但是多个 Lambda 函数可以 运行 并行并且它们可以 运行 在多个可用区中。通过 NAT 网关发送所有流量是确保它们都具有相同 IP 地址的唯一方法。 (或者,更具体地说,每个启动 NAT 网关的 AZ 一个 IP 地址。)

我同意 John 关于静态 IP 白名单部分的回答。但是,它不会解决您的冷启动问题,因为如果理想情况下,lambda 实际上需要很短的时间才能启动。因此,我建议您还创建一个 Cloudwatch 事件以定期命中 lambda 来解决此问题,或者编写一个简单的代码(在 lambda 或其他地方)定期发送一个空请求,以便解决冷启动问题。您可以在 X-Ray 中查看改进。这是一个开销但一次性的过程。