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

标签 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

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

最佳答案

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

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

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

关于java - AWS Lambda 连接到可公开访问的 AWS RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55022037/

相关文章:

java - 为什么java编译器不重写这段代码?

amazon-web-services - 使用 AWS CLI lambda 调用时,是否可以传递环境变量?

java - AntiSamy for TinyMce 样式属性

java - AWS java 网络服务器

amazon-web-services - 如何在 AWS Lambda 中获取 Cognito 身份 ID

amazon-web-services - (错误)Elasticloadbalancer 无法使用 arn cloudformation 找到 ACM 证书

node.js - AWS Lambda::如何在本地 ubuntu 计算机上测试我的代码?

amazon-web-services - Sagemaker boto3 invoke_endpoint - 我不断收到有效载荷的类型错误。使用 Blazingtext 模型端点

java - Spring Boot 示例在 eclipse 中抛出 MojoExecutionException

java - 调用基本重绘方法?