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

时间:2019-03-06 11:29:36

标签: java amazon-web-services aws-lambda amazon-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中,并且具有角色策略arn:aws:iam::aws:policy/AmazonRDSDataFullAccess

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

1 个答案:

答案 0 :(得分:0)

尽管创建了RDS数据库以供公众访问,但它具有一个安全组规则,该规则仅允许来自我的IP(创建数据库的IP)的传入请求。通过修改其安全组的传入规则以允许来自任何地方的请求,lambda可以连接到数据库。

政策arn:aws:iam::aws:policy/AmazonRDSDataFullAccess似乎是不必要的。

感谢this answer帮助我解决问题。