您好我遇到与 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;“,
答案 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