我正在尝试使用c#,dotnet core 2.0和npgsql从lambda函数连接到AWS Redshift数据库。我遇到SSL问题。
我在专用的VPC中创建了两个不可公开访问的Redshift数据库。 lambda在同一个VPC中执行。这两个数据库在各方面都是相同的,只有一个具有强制SSL"参数设置为true。
使用以下代码段,我可以正常访问非SSL数据库:
using (var conn = new NpgsqlConnection ("Host=x; Port=5439; Username=x;
Password=x;Database=xxx")
{
Console.WriteLine("Redshift pre-Open!");
conn.Open();
Console.WriteLine("Redshift: post-Open!");
...
}
当我访问SSL数据库时,我得到了"缺少hba.conf"错误信息 - 似乎是标准的,我以前见过它...... 当我附加到连接字符串时:" ssl Mode = Require;服务器兼容模式= Redshift; Trust Server Certificate = true" conn.open语句挂起,第二个写语句永远不会出现在cloudwatch中。
然而......当通过rest API和C#/ dotnetcore 2 WEBAPI(相同的运行时环境)访问同一个数据库时,此连接语句有效 EC2实例和负载均衡器。
连接到SSL数据库的Python lambda,在相同的环境中 - 子网,安全组,lambda触发器,lambda参数......工作得很好。
csproj引用了Amazon.Lambda.Core 1.0.0,Amazon.Lambda.Serialization.Json 1.1.0,以及 Npgsql.EntityFrameworkCore.PostgreSQL 2.0.1。
我可能会在另一个环境中尝试Wireshark - 但作为一个lambda运行,我不确定如何最好地调试。我已经尝试了许多排列和组合,我不会把它放在过去,因为我错过了一些令人眼花缭乱的东西, 但我绝对不明白为什么要挂。谢谢。