14

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

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

4

3 回答 3

24

您将需要:

  • 创建具有 Internet 网关、公共子网和私有子网的VPC
  • AWS Lambda 函数附加到私有子网
  • 在公共子网中启动NAT 网关并更新私有子网的路由表以使用 NAT 网关

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

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

于 2019-06-20T05:09:46.397 回答
8

您不能将公共/静态 IP 分配给任何Lambda 函数。

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

另见:

于 2019-06-19T22:19:41.370 回答
6

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

于 2019-06-20T06:39:56.873 回答