【问题标题】:Is there a way to assign a Static IP to a AWS Lambda without VPC?有没有办法在没有 VPC 的情况下将静态 IP 分配给 AWS Lambda?
【发布时间】:2019-11-02 16:48:49
【问题描述】:

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

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

【问题讨论】:

  • VPC 中的冷启动时间现在应该根据aws.amazon.com/blogs/compute/… 显着减少
  • 需要 VPC 真的很不幸,因为它需要为出站 Internet 访问添加 NAT,而 NAT 对于非常低容量的应用程序(例如测试环境)来说非常昂贵。

标签: amazon-web-services aws-lambda aws-api-gateway amazon-vpc cold-start


【解决方案1】:

您需要:

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

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

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

【讨论】:

  • lambda通过DX调用prem服务器的场景怎么样?这一步一步是否也适用于这种替代方案?还是白名单应该是子网 CIDR 范围?
  • @jbooker 以上不适用于 Direct Connect 连接,因为流量不会通过 NAT 网关(假设它已配置为私有子网连接到 DX)。我喜欢您将 Lambda 使用的子网的 CIDR 列入白名单的想法。
  • 谢谢约翰!你太棒了!我一直在我最近关注的帖子中看到你的答案,你是最重要的!我发誓!来自您的优质答案和信息,永远
  • 完成此设置后,是否可以从该 VPC 外部的另一个 Lambda 调用私有子网中的 Lambda?如果是这样,我们可以使用这个单一的 Lambda 来路由我们的请求,以便它们获得一个静态 IP,而无需将我们所有的逻辑放入该 Lambda/VPC。
  • @pir 是的,那行得通。您可以从 Internet 上的任何位置调用 Lambda 函数。
【解决方案2】:

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

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

另见:

【讨论】:

  • 感谢您收录我的文章!
【解决方案3】:

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

【讨论】:

  • 谢谢。我很确定 VPC 会帮助我分配静态 IP。但我不会稍微缓解冷启动时间。所以,我不想像我在问题中所说的那样走 VPC 的路线。我将尝试定期向 lambda 请求。
  • 如果它对你有用,你可能想接受答案:-)
猜你喜欢
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 2018-07-07
  • 1970-01-01
  • 2017-12-17
相关资源
最近更新 更多