【问题标题】:How to connect private RDS from aws lambda如何从 aws lambda 连接私有 RDS
【发布时间】: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


【解决方案1】:

您需要在 VPC 中部署您的 Lambda,因为您的 RDS 不公开。

【讨论】:

  • 我已经在默认 VPC 中部署了 lambda,但仍然遇到同样的错误,我想知道我应该在默认 vpc 中更新什么来连接私有 rds?
猜你喜欢
  • 2019-05-16
  • 2021-06-10
  • 2019-06-28
  • 2017-07-25
  • 2017-12-27
  • 2022-01-06
  • 2018-05-13
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多