繁体   English   中英

AWS LAMBDA使用SqlConnection连接到RDS SQL数据库

[英]AWS LAMBDA Connect to RDS SQL database using SqlConnection

如何在ASW Lambda函数上连接到RDS SQL服务器数据库?

以下代码在常规C#控制台应用程序项目上运行良好,但是一旦我将其部署到AWS并试图调用它,就会在AWS Lambda项目上给出错误:

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;
        }
    }

错误:

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

您必须执行以下操作:

  1. 将Lambda函数放在与RDS实例相同的VPC中。
  2. 打开分配给RDS实例的安全组以允许来自Lambda函数的连接。 最简单的方法是在RDS安全组中创建规则,允许来自Lambda安全组的入站连接。

您是否在Lambda函数中配置了VPC?

请查看: http//docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM