[英]How to properly connect AWS Lambda to RDS in VPC?
我正在尝试使用Apollo-Server-Lambda等在AWS-Lambda 上使用无服务器框架构建 graphQL API。我需要使用未公开可用的 PostgreSQL RDS 实例。
当不在 VPC 中时,我可以启动并运行 lambdas 并发送回请求。 我可以启动并运行 Postgres RDS 数据库并连接到 PgAdmin(在公开可用模式下)。
问题是,一旦我将 RDS Postgres 设为“非公开”并尝试将所有这些内容放在一起讨论,我就会失败。
我尝试了多种不同的方法。
这经常被描绘成魔术。 写 得很精彩https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7
我无法使用我的 lambdas 访问 Postgres。 所以我的第一个问题。
我是否需要 NAT 网关来对 VPC 中的 lambda 进行传入(入口)api 调用? 我目前的理解是,也许我只需要一个 NAT 网关来让我的 lambdas 使用 aws 或 S3 之类的东西向外调用其他 api。 这是正确的吗?
接下来。 我为我的 lambdas 创建了一个安全组,并将这个安全组添加到为 RDS 创建的安全组的入站列表中。 我的理解是这就是 lambda 应该如何访问 RDS。 我没有这样的运气。 也许这与公共或非公共子网有关? 也许这与我对 NAT 必要性的理解有关?
基本上,我能够获得的唯一可见性是 Lambda 在 20 或 30 秒后超时,具体取决于他们尝试私下连接到 postgres 时的限制。 Cloudwatch 日志没有显示其他内容。
最后,现在😂,一旦“不公开”,将我的开发机器连接到 Postgres 的最佳方法是什么? 我将我的机器 IP 列为入站 TCP/IP 到端口 5432 到 RDS 安全组中的 postgres,但这似乎没有给我我希望的访问权限。 我真的需要连接到 VPC 的 VPN 吗? 最简单的方法是什么?
我已经完成了对 Postgres https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html 的基本更改的本教程
我已经阅读并考虑了这个问题的答案以及更多Allow AWS Lambda to access RDS Database
我已经使用无服务器框架进行了许多成功的完整部署,在 serverless.yml 配置上有许多变化来尝试这些选项,否则我会展示一个我认为失败的特定选项,但这更广泛地说,我似乎无法准确掌握所有这些VPC、安全组、路由表等应该交互。
非常感谢任何帮助!
显然,Lambda 需要设置为在同一个 VPC 内运行,但我假设您已经知道了。
你需要:
它有效吗?
确保您的 Lambda 函数在 VPC 中,并且安全组允许来自 VPC 子网内 IP 地址的连接。 可用 IP 地址的数量将影响可以同时运行的 lambda 函数的数量。 还要确保 Lambda 函数的角色能够描述 VPC(AWSLambdaVPCAccessExecutionRole 策略应该为您完成这项工作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.