【问题标题】:Is there a way to query RDS DB in VPC from Lambda outside VPC without NAT有没有办法在没有 NAT 的情况下从 VPC 外部的 Lambda 查询 VPC 中的 RDS DB
【发布时间】:2018-10-06 13:48:47
【问题描述】:

我一直在寻找一些好的设计理念,但还没有找到最佳选择。基本上我正在为现有数据库(VPC 内的 RDS MySQL,私有安全组)开发无服务器 API。所以我想从多个 Lambda 函数中查询数据库。我知道如何实现这一点的以下方法:

  1. 将所有 Lambda 放在同一个 VPC 中。但是这种情况并不好,因为 Lambda 的冷启动缓慢(我需要让它们保持温暖)和并发限制。另外,我需要调用其他服务(S3、SES、第三方服务)=> 配置会更加困难。因此,最好将它们保留在 VPC 之外。
  2. 将单个 Lambda(只会查询数据库)放在同一个 VPC 中,并使用私有 API 网关从 VPC 外部的其他 Lambda 调用它。 VPC 中的 Lambda 将始终是温暖的,但由于对这个 Lambda 的大量并发请求,它似乎是一个瓶颈。我知道可以创建多个安全组并请求更多 IP,但需要不断监控情况,这是不可接受的。
  3. 打开 RDS 以从 Internet 访问不是解决方案。
  4. Aurora 无服务器也需要 VPC...

有什么想法或建议吗?

谢谢!

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-rds aws-security-group aws-vpc


    【解决方案1】:

    在回答你标题中的问题时,不,这是不可能的。

    根据您的描述,您希望调用可以访问 VPC 内部和外部资源的 lambda。您的前两个选项几乎描述了您在此处的唯一选项。

    关于您的选项 1。您可以将 lambdas 放置在 VPC 中并拥有一个 NAT 以返回 Internet。我认为这就是您所说的“配置将更加困难”。但至少您的 VPC 外部没有任何东西可以启动与 VPC 内部的某些东西的连接。我不认为添加 NAT 网关(请参阅 https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)“困难得多”,但我想这是主观的。

    关于您的选项 2。您可以使用非 VPC Lambda,直接在 VPC 内调用 Lambda(反之则不起作用)。因此,实际上不需要 API 网关(私有或其他)形式的附加组件。 VPC 内的 Lambda 将自动扩展,但受您指定的子网中可用 IP 数量的限制。所以需要一些容量规划。

    NB - 每个选项都需要在 VPC 中至少有一个 lambda。这些 lambda 的冷启动会导致 ENI(弹性网络接口)的设置稍有延迟。

    【讨论】:

    • 谢谢!我想,就性能而言,选项 2 是更好的方法,因为它应该更容易规划容量并保持单个 VPC Lambda 的实例温暖。因此,其他所有 Lambda 都将通过 VPC 内部的 Lambda 查询数据库。你怎么看?
    • 知道我不清楚您期望调用 lambda 的频率或它们可能需要什么并发性,我会选择选项 2,因为它会更容易实施和管理子网。它还会使解决方案松散耦合,因此将来更换数据库会更简单(不确定这是否对您有利)。
    • 我不知道确切的数字,但预计会有数百个并发请求,因为我的无服务器 API 几乎会在每个请求(身份验证和不同的休息请求)上查询数据库。据我了解,我可以为私有子网请求更多 IP,以提高高负载的性能。最好从头开始避免错误的设计并为高负载做好准备。
    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2015-04-09
    • 2021-02-06
    • 1970-01-01
    • 2020-11-21
    • 2017-07-20
    相关资源
    最近更新 更多