【发布时间】:2017-10-12 11:51:42
【问题描述】:
我正在尝试从我的 VPC 中的 AWS Lambda 连接到我的 SQL Server RDS 实例(使用 .net 核心)。
当我尝试运行 Lambda 函数时,它返回:
"errorType": "SqlException", "errorMessage": "Connection Timeout Expired。在登录后阶段超时时间已过。连接可能在等待服务器完成登录过程并响应时超时;或者它可能在尝试创建多个活动连接时超时。尝试连接到此服务器所花费的持续时间是 - [登录前] 初始化 = 781;握手 = 1957;[登录] 初始化 = 40;身份验证 = 122;[登录后] complete=12219;",
我已经配置了以下内容:
- RDS 实例和 Lambda 在同一个 VPC 中
- RDS 实例和 Lambda 在同一个 AZ 和子网中
- Lambda 位于其自己的安全组中
- RDS 实例安全组已授予 Lambda SG 端口 1433 的权限
- Lambda IAM 角色拥有 AWSLambdaFullAccess 和 AWSLambdaVPCAccessExecutionRole 的权限
- MSSQL 连接字符串(终端节点、用户 ID、密码等)适用于同一 VPC/AZ/子网中的 EC2 实例。
连接字符串如下所示(使用 Dapper 作为我的 ORM)
string dbconnstr = @"server=vpc100-db.xyz.us-west-1.rds.amazonaws.com;database=dbMyDb;user id=sa;password=mypwd;";
知道我错过了什么吗?
【问题讨论】:
-
看起来你已经涵盖了所有内容,所以首先我会仔细检查实际设置是否符合上述内容。你为连接成功的EC2设置了什么SG?我有类似的问题,一旦我将 SG 设置得更宽松,允许任何 IP 地址,它就解决了。告诉我进展如何。
-
您的意思是让 RDS SG 更松散吗?我尝试将入站规则添加到允许所有 TCP 和所有 IP 的 RDS 安全组。它没有改变结果。仍然收到“登录后阶段超时时间已过”错误。似乎 Lambda 函数正在查找 SQL Server,因为它没有说“找不到服务器”,但连接仍然失败。
标签: sql-server .net-core aws-lambda amazon-rds