【问题标题】:AWS Lambda - Unable to connect to SQL Server RDS in VPCAWS Lambda - 无法连接到 VPC 中的 SQL Server RDS
【发布时间】: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


【解决方案1】:

解决了。数据库引擎版本是问题所在。

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

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 2018-10-20
    • 2017-04-16
    • 2020-12-20
    • 2018-07-10
    • 2021-06-10
    • 2021-07-25
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多