2017-09-07 1 views
4

Wie kann ich eine Verbindung zu einer RDS SQL Server-Datenbank über eine ASW Lambda-Funktion herstellen?AWS LAMBDA Verbindung zur RDS SQL-Datenbank mithilfe von SqlConnection herstellen

Dieser Code unten funktionieren auf regelmäßige Konsole app Projekt C#, aber ich Fehler auf AWS Lambda-Projekt zu geben, sobald ich es AWS eingesetzt und versucht, sie aufzurufen:

public static string CS = "Data Source=host-name, 1433; Initial Catalog=database-name; User ID=username; Password='password';"; 

    public static List<string> Get_Rule_Group() 
    { 
     using (SqlConnection con = new SqlConnection(CS)) 
     { 
      string query = "SELECT abc from table where abc = xyz"; 
      SqlCommand cmd = new SqlCommand(query, con); 
      con.Open(); 
      SqlDataReader reader = cmd.ExecuteReader(); 
      List<string> Rule_Group = new List<string>(); 
      while (reader.Read()) 
      { 
       Rule_Group.Add(reader["abc"].ToString()); 
      } 
      return Rule_Group; 
     } 
    } 

Fehler:

2017-10-06 19:10:27: START RequestId: f33cf098-9360-11e7-96fb-7594ff8505a7 Version: $LATEST 
2017-10-06 19:10:43: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 35 - An internal exception was caught) 
2017-10-06 19:10:44: at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling) 
2017-10-06 19:10:44: at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 
2017-10-06 19:10:44: at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 
2017-10-06 19:10:44: at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 
2017-10-06 19:10:44: at System.Data.SqlClient.SqlConnection.Open() 
2017-10-06 19:10:44: at AWSLambdaErrorReport.DAL.Get_Rule_Group() 
2017-10-06 19:10:44: at AWSLambdaErrorReport.Function.<FunctionHandler>d__6.MoveNext() 
2017-10-06 19:10:44: FAILED to proceed 
2017-10-06 19:10:44: END RequestId: f33cf098-9360-11e7-96fb-7594ff8505a7 
2017-10-06 19:10:44: REPORT RequestId: f33cf098-9360-11e7-96fb-7594ff8505a7 Duration: 17209.25 ms Billed Duration: 17300 ms Memory Size: 256 MB Max Memory Used: 40 MB 
+0

Hallo, U hat irgendeine Lösung dafür. Ich habe auch das gleiche Problem. –

Antwort

0

Sie haben folgendes zu tun:

  1. Platz der Lambda-Funktion in der gleichen VPC als RDS-Instanz.
  2. Öffnen Sie die Sicherheitsgruppe, die der RDS-Instanz zugewiesen wurde, um Verbindungen von der Lambda-Funktion zuzulassen. Der einfachste Weg dazu ist das Erstellen einer Regel in der RDS-Sicherheitsgruppe, die eingehende Verbindungen von der Lambda-Sicherheitsgruppe ermöglicht.
+0

Woher weiß ich, ob meine Lambda-Funktion und der RDS-Eingang in derselben VPC sind? Ich sehe den VPC-Namen, wenn ich meine RDS-Instanz anschaue, aber meine Lamdba-Funktion zeigt nicht an, auf welcher VPC sie sich befindet? –

+0

Nmv Ich sehe die VPC-Option für Lambda unter der Registerkarte Konfiguration, sie sind in der gleichen VPC –

+0

OK, IAM Rolle für den Lambda hat vollen Zugriff ro fast alles (Lambda, S3, Clouwatch, RDS, EC2 etc.), Sicherheitsgruppe denn der RDS ist offen, ALLE VERKEHRSMITTEL von überall zu akzeptieren, immer noch mit denselben Problemen. Ich frage mich, ob .Net-Kern und LAmbda ADO.NET (sqlconnection etc.) nicht unterstützen –

Verwandte Themen