AWS Lambda подключается к общедоступной AWS RDS - PullRequest
0 голосов
/ 06 марта 2019

Я создал общедоступный PostgreSQL RDS в AWS и имею следующий код для подключения к нему:

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

Лямбда не находится в VPC и имеет политику ролей arn:aws:iam::aws:policy/AmazonRDSDataFullAccess.

Может кто-тоскажите что я делаю не так?

1 Ответ

1 голос
/ 06 марта 2019

Несмотря на то, что база данных RDS была общедоступной, она имела правило группы безопасности, которое разрешало только входящие запросы с моего IP-адреса (тот, который создал базу данных). Редактирование входящих правил своей группы безопасности, разрешающих запросы из любого места, позволило лямбде подключиться к базе данных.

Политика arn:aws:iam::aws:policy/AmazonRDSDataFullAccess кажется ненужной.

Спасибо за этот ответ за помощь в его решении.

...