AWS Lambda 连接到可公开访问的 AWS RDS

我在 AWS 中创建了一个可公开访问的 PostgreSQL RDS,并使用以下代码连接到它:


try {

  DriverManager.registerDriver(new org.postgresql.Driver());

  String url = "jdbc:postgresql://" + DATABASE_SERVER_NAME + ":" + DATABASE_PORT_NUMBER + "/" + DATABASE_NAME + "?user=" + DATABASE_USER + "&password=" + DATABASE_PASSWORD;

  try (Connection connection = DriverManager.getConnection(url)) {

    try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM \"" + PHANTOM_LOAD_STORE_DATABASE_TABLE_NAME + "\"")) {

      try (ResultSet resultSet = statement.executeQuery()) {

        while (resultSet.next()) {

          System.out.println(resultSet.getString("userid"));

        }

      }

    }

  }

} catch (SQLException e) {

  throw new RuntimeException(e);

}

当它在本地运行时,它会成功连接到数据库服务器。


当它在 AWS Lambda 中运行时,它无法连接并出现以下错误:


org.postgresql.util.PSQLException: The connection attempt failed.

...

Caused by: java.net.SocketTimeoutException: connect timed out

lambda 不在 VPC 中并且具有角色 policy arn:aws:iam::aws:policy/AmazonRDSDataFullAccess。


有人可以告诉我我做错了什么吗?


PIPIONE
浏览 81回答 1
1回答

交互式爱情

尽管创建了可公开访问的 RDS 数据库,但它有一个安全组规则,只允许来自我的 IP(创建数据库的那个)的传入请求。编辑其安全组的传入规则以允许来自任何地方的请求已允许 lambda 连接到数据库。该政策arn:aws:iam::aws:policy/AmazonRDSDataFullAccess似乎没有必要。感谢这个答案帮助我解决了这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java