【发布时间】:2019-01-28 14:19:23
【问题描述】:
我正在建立 JDBC 连接以从 Lambda 函数访问 AWS RDS,RDS 可访问性是私有的,它允许访问我的 EC2 公共 IP,因此我能够在 EC2 实例中进行连接,但是当我的 lambda 函数每 5 次调用一次时分钟,它给出以下错误
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
美国东部地区的RDS,
美国西部地区的 EC2 和 lambda
JDBC 代码:
String username = prop.getProperty("dbUser");
String password = prop.getProperty("dbPassword");
String driver = prop.getProperty("dbDriver");
String url = prop.getProperty("dbUrl"); // RDS endpoint
String jdbcUrl = url + "?user=" + username + "&password=" + password;
logger.info("Creating JDBC MySQL Connection "+driver);
Class.forName(driver);
connection = DriverManager.getConnection(jdbcUrl);
【问题讨论】:
-
您是否在这些区域之间启用了 VPC 对等互连?您有合适的安全组吗?
-
是的,我有 ec2 安全组,我在其中添加了 mysql 端口 3306 的规则
-
对等如何?您添加到安全组的规则究竟是什么?您提供的信息越多,您得到答案的可能性就越高。
-
我没有使用对等互连,我也不太了解对等互连,我已在我的 EC2 安全组中授予对 3306 的任何访问权限。 @kdgregory
-
如果您在RDS安全组中仅将EC2公网IP列入白名单,并且两个AWS区域之间没有VPC对等,并且EC2实例可以连接到RDS实例,那么RDS 实例必须配置为可公开访问。因此,您问题中的一条信息一定是不正确的。
标签: amazon-web-services amazon-ec2 aws-lambda amazon-rds mssql-jdbc