1

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

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

有什么想法或建议吗?

谢谢!

4

1 回答 1

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 数量的限制。因此需要进行一些容量规划。

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

于 2018-10-09T09:46:37.413 回答