如何在VPC中正确连接AWS Lambda到RDS?

Car*_*ert 3 amazon-web-services amazon-rds amazon-vpc aws-lambda serverless-framework

我正在尝试使用Apollo-Server-Lambda等在AWS-Lambda上使用无服务器框架构建graphQL API .我需要使用一个不公开的PostgreSQL RDS实例.

我可以启动并运行lambda,并在不在VPC中时发回请求.我可以启动并运行Postgres RDS数据库并连接到PgAdmin(当处于公共可用模式时).

问题是,一旦我将RDS Postgres"非公开"并试图让所有这些片段一起说话我就失败了.

我尝试了很多不同的方法.

这经常被描绘成魔术.这是精彩的写作https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7

我无法使用我的lambdas访问Postgres.所以我的第一个问题.

我是否需要一个NAT网关来为VPC中的lambdas传入(入口)api调用?我目前的理解是,也许我只需要一个NAT网关来为我的lambdas拨打其他api的电话,例如S3.它是否正确?

接下来.我为我的lambdas创建了一个安全组,并将此安全组添加到为RDS创建的安全组的入站列表中.我的理解是lambda应该如何获得RDS.我没有这么幸运.也许这与公共或非公共子网有关?也许这与我对NAT必要性的理解有关?

基本上我能够获得的唯一可见性是Lambdas在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

我已阅读并考虑了此问题的答案以及更多 允许AWS Lambda访问RDS数据库

我已经有很多成功 - 使用无服务器框架的完全部署,在serverless.yml配置上有很多变化来尝试这些选项,否则我会展示一个我认为失败的特定的一个,但这更广泛地说我似乎无法准确掌握所有这些VPC,安全组,路由表等应该互动.

任何帮助非常感谢!

Ren*_*rro 9

显然,Lambda需要设置为在同一个VPC内运行,但我假设你已经有了.

你需要:

  1. 创建安全组(SG)并将其与Lambda函数关联.
  2. 现在,打开与RDS实例关联的SG(不是您在上面创建的实例).
  3. 在RDS SG内,转到"入站"选项卡,然后单击"编辑"
  4. 在Type列中选择"PostgreSQL".在Source列中,在select下拉列表中选择"Custom",然后在输入文本中输入Lambda SG ID(如果您开始输入"sg-",它将显示您的所有SG).

它有用吗?