【问题标题】:AWS Lambda - Unable to connect to SQL Server RDSAWS Lambda - 无法连接到 SQL Server RDS
【发布时间】:2017-12-13 16:19:58
【问题描述】:

您好,我遇到了与 this post 相同的问题,但没有提供发布的答案(没有示例代码),所以我将开始一个新线程并询问你们。

我已经为我们的 lambda 函数创建了一个 AWS Serverless Application (.Net Core) 项目,下面的代码是我用来在 AWS RDS 中连接的代码。


string ConnectionString = "Data Source=rds4abc1190.asdfqwerqb9l.us-east-1.rds.amazonaws.com,2855;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=myID;Password=mypassword;Encrypt=False";

using (var Conn = new SqlConnection(ConnectionString))
{
     using (var Cmd = new SqlCommand("SELECT * from Customer", Conn))
     {
          Conn.Open(); //<-- this is where the error fires.

          SqlDataReader rdr = Cmd.ExecuteReader();
          while (rdr.Read())
          {
                myDbItems.Add(rdr[1].ToString());
          }

          Conn.Close();
      }
 }

在本地机器上运行时使用上述代码可以正常工作,但如果部署在 AWS Api Gateway 中,该代码会出错。

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

【问题讨论】:

  • 您的 lambda 是否驻留在与有权访问 SQLServer RDS 子网的 SQLServer 位于同一 VPC 的 VPC 子网中?

标签: c# .net-core aws-lambda amazon-rds aws-api-gateway


【解决方案1】:

在 serverless.template 的每个函数中添加以下内容。

"Role": "arn:aws:iam::053984854873:role/1234-Dev",              
    "Policies": [ "AWSLambdaBasicExecutionRole", "AWSLambdaBasicExecutionRole-ABC1234","LambdaAccess-1234" ], 
    "VpcConfig" : {
        "SecurityGroupIds" : ["sg-4f2cbff1","sg-3584a444"],
        "SubnetIds" : ["subnet-f2520727","subnet-388b4ab2"]
    }

【讨论】:

    【解决方案2】:

    如果答案与引用的帖子相同,则没有任何示例代码,因为这不是代码问题。他升级了 RDS 中的数据库引擎版本,因为 AWS Lambda 使用的驱动程序不支持与 MSSQL 2008 R2 的连接,而他的本地计算机具有必要的驱动程序。

    这是关于升级 RDS SQL Server 引擎版本的 AWS 文档:

    http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.SQLServer.html

    【讨论】:

    • 我们解决了我的问题。我们刚刚在 serverless.template 中添加/包含了 VpcConfig、角色和策略。
    • 啊,有道理。确保 Lambda 函数在具有正确角色和安全组的正确 VPC 中运行可能是一个症结所在。我会在 IAM 控制台中为角色设置策略,以确保其价值,因此您不必在编写的每个无服务器模板上输入策略。
    猜你喜欢
    • 2017-10-12
    • 2017-04-16
    • 2020-12-20
    • 2021-06-10
    • 2018-05-13
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多