AWS Lambda - 无法连接到 VPC 中的 SQL Server RDS

我正在尝试从 VPC 中的 AWS Lambda 连接到我的 SQL Server RDS 实例(使用 .net core).

I am trying to connect to my SQL Server RDS instance from AWS Lambda in my VPC (using .net core).

当我尝试运行 Lambda 函数时,它返回:

When I attempt to run the Lambda function, it returns:

"errorType": "SqlException", "errorMessage": "Connection Timeout Expired.在登录后阶段超时时间已过.连接可能在等待服务器完成登录过程并响应时超时;或者它可能在尝试创建多个活动连接时超时.尝试连接到此服务器所花费的持续时间是 - [登录前]初始化=781;握手=1957;[登录]初始化=40;身份验证=122;[登录后] complete=12219;",

"errorType": "SqlException", "errorMessage": "Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=781; handshake=1957; [Login] initialization=40; authentication=122; [Post-Login] complete=12219;",

我已经配置了以下内容:

I have configured the following:

  • RDS 实例和 Lambda 都在同一个 VPC 中
  • RDS 实例和 Lambda 都在同一个可用区和子网中
  • Lambda 位于自己的安全组中
  • RDS 实例安全组已为 Lambda SG 授予端口 1433 的权限
  • Lambda IAM 角色拥有 AWSLambdaFullAccess 和 AWSLambdaVPCAccessExecutionRole 的权限
  • MSSQL 连接字符串(端点、用户 ID、密码等)在同一 VPC/AZ/子网中的 EC2 实例中工作.

连接字符串看起来像这样(使用 Dapper 作为我的 ORM)

The connection string looks like this (using Dapper as my ORM)

string dbconnstr = @"server=vpc100-db.xyz.us-west-1.rds.amazonaws.com;database=dbMyDb;user id=sa;password=mypwd;";

知道我错过了什么吗?

推荐答案

已解决.数据库引擎版本是问题.

Solved. DB engine version was the issue.

事实证明,这不是 Lambda 或 VPC 和 RDS 的权限问题.无法从 Lambda(通过 c# .net core)连接到 RDS 是数据库版本!我正在连接到一个 RDS MS SQL 2008 R2,它使用本地代码而不是 Lambda.当我将 RDS 目标数据库更改为 MS SQL 2016 时,它起作用了!

It turns out it wasn't a permission problem with Lambda or the VPC and RDS. The inability to connect from Lambda (via c# .net core) to the RDS was the database version! I was connecting to a RDS MS SQL 2008 R2 which worked from local code but not from Lambda. When I changed the RDS target db to MS SQL 2016 it worked!

相关文章