2017-07-10 203 views
1

您好我有與this post相同的問題,但沒有提供發佈的答案(沒有示例代碼),所以我會開始一個新的線程,並問你們。AWS Lambda - 無法連接到SQL Server RDS

我創建了一個AWS無服務器應用程序(.NET核心)項目爲我們的lambda函數和下面的代碼是我用來在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網關,該代碼就會出錯。

「ERRORTYPE」:「SQLEXCEPTION」,「的errorMessage」:「連接超時過期時後登錄階段超時時間已過的連接可能超時的同時等待服務器完成登錄過程和響應;或者嘗試創建多個活動連接時可能超時;試圖連接到此服務器的時間是[預登錄]初始化= 781;握手= 1957; [登錄]初始化= 40;身份驗證= 122;後登錄]完整= 12219;」

+0

您的lambda是否駐留在與有權訪問SQLServer RDS子網的SQLServer在同一個VPC中的VPC子網內部? – Ashan

回答

0

如果答案是一樣的引用後,再有就是沒有任何樣本代碼,因爲它不是一個代碼問題。他升級了RDS中的數據庫引擎版本,因爲AWS Lambda使用的驅動程序不支持連接到MSSQL 2008 R2,而他的本地計算機具有必要的驅動程序。

這裏是升級RDS SQL Server引擎版本的AWS文檔:

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

+0

我們解決了我的問題。我們只是在serverless.template中添加/包含了VpcConfig,角色和策略。 –

+0

啊,有道理。確保Lambda函數在具有正確角色和安全組的正確VPC中運行可能是一個棘手的問題。我將在IAM控制檯中爲角色設置策略,以確定它的價值,因此您不必在每個無服務器模板上輸入策略。 –

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"] 
    }