我正在尝试使用Serverless Framework等AWS-Lambda在Apollo-Server-Lambda上使用https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7构建graphQL API。我需要使用一个不公开的PostgreSQL RDS实例。
我可以启动并运行lambda,并在不在VPC中时发回请求。我可以启动并运行Postgres RDS数据库并连接到PgAdmin(在公共模式下)。
问题是,一旦我让RDS Postgres'非公开'并试图让所有这些片段在一起说话我就失败了。
我尝试过多种不同的方法。
这经常被描绘成魔术。它写得很精彩https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html
我无法使用我的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 Allow AWS Lambda to access RDS Database
进行了基本修改我已阅读并考虑了这个问题的答案&更多 {{3}}
我已经取得了很多成功 - 无服务器框架的完全部署,在serverless.yml配置上有很多变化来尝试这些选项,否则我会展示一个我认为失败的特定部分,但这更广泛地说我似乎无法准确掌握所有这些VPC,安全组,路由表等应该如何交互。
任何帮助都非常感谢!
答案 0 :(得分:8)
显然,Lambda需要设置为在同一个VPC中运行,但我假设你已经有了。
你需要:
有效吗?
答案 1 :(得分:1)
确保您的Lambda功能在VPC中,并且安全组允许来自VPC子网内IP地址的连接。可用IP地址的数量将影响可以并发运行的lambda函数的数量。还要确保Lambda函数的角色能够描述VPC(AWSLambdaVPCAccessExecutionRole策略应该为您完成工作)。