AWS Lambda - 无法连接到SQL Server RDS

时间:2017-07-10 03:38:02

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

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

我为lambda函数创建了 AWS无服务器应用程序(.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”:“连接超时已到期。在登录后阶段已经过了超时时间。在等待服务器完成登录过程并响应时,连接可能已超时;或者尝试创建多个活动连接时可能会超时。尝试连接到此服务器时花费的持续时间为 - [Pre-Login] initialization = 781; handshake = 1957; [Login] initialization = 40; authentication = 122; [登录后]完成= 12219;“,

2 个答案:

答案 0 :(得分: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"]
    }

答案 1 :(得分:0)

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

以下是有关升级RDS SQL Server Engine版本的AWS文档:

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