【问题标题】:AWS Lambda connecting to publicly accessible AWS RDSAWS Lambda 连接到可公开访问的 AWS RDS
【发布时间】:2019-07-28 01:19:57
【问题描述】:

我在 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

谁能告诉我我做错了什么?

【问题讨论】:

  • 您从 RDS 安全组规则中启用了哪个 IP?。我认为您需要配置 Lambda 才能访问 RDS 实例
  • 是的,您说得对,安全组规则限制性太强。我已将其修复为更加宽松。 “配置 Lambda 访问 RDS 实例”是什么意思?
  • 我认为这可能是因为您的 RDS 实例无法通过 lambda 函数访问..所以为此您需要进行一些附加设置..无论如何我希望通过更改 RDS 安全性来解决您的问题组规,对了,你改成什么工作了?
  • 在下面查看我的答案。它自动将传入请求限制为仅来自我的 IP 的请求,因此我更改了传入规则以允许来自任何地方的请求。
  • 知道了。宾果游戏..

标签: java amazon-web-services aws-lambda amazon-rds


【解决方案1】:

尽管创建了可公开访问的 RDS 数据库,但它有一个安全组规则,只允许来自我的 IP(创建数据库的那个)的传入请求。编辑其安全组的传入规则以允许来自任何地方的请求已允许 lambda 连接到数据库。

政策arn:aws:iam::aws:policy/AmazonRDSDataFullAccess 似乎没有必要。

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

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2015-04-17
    • 2018-11-27
    • 2021-01-21
    相关资源
    最近更新 更多