【问题标题】:Not able connect Amazon Aurora Serverless from SQL client无法从 SQL 客户端连接 Amazon Aurora Serverless
【发布时间】:2019-08-26 15:30:02
【问题描述】:

今天我在 us-west-2 中为 PostGreSql 创建了 Amazon Aurora Serverless 集群,确保了 VPC 和安全组在 一种方式,它应该是公开可访问的。但我无法使用 Navicat/PgAdmin4 桌面客户端中的极光端点连接该集群。然后我尝试了与 Aurora Serverless 相同的安全组/vpc 中的 EC2 实例,然后它工作了。

来自 AWS 论坛,

您不能为 Aurora Serverless 数据库集群提供公共 IP 地址。 您可以从内部访问 Aurora Serverless 数据库集群 only 虚拟私有云 (VPC) 基于 Amazon VPC 服务。

来源: https://forums.aws.amazon.com/thread.jspa?messageID=862860&tstart=0

似乎它使用了内部 AWS 网络设置,该设置目前仅支持来自 VPC 内部的连接,并且它必须与部署无服务器集群的 VPC 相同。

所以现在基本上我的问题是,

是否有任何解决方法可以将 Aurora Serverless 与任何客户端(如 Navicat 或 PgAdmin4)连接?

【问题讨论】:

    标签: amazon-aurora aws-aurora-serverless


    【解决方案1】:

    这个问题一遍又一遍地出现在多个 AWS 服务中(大多数新服务默认仅是 VPC)。简短的回答是 - 您可以破解某些东西并将数据库暴露在 VPC 之外,但不建议将其用于生产设置。假设这是用于开发设置,请务必尝试 [1] 中的建议。它适用于 Neptune,但您也可以为 Aurora 做同样的事情。

    [1]Connect to Neptune on AWS from local machine

    【讨论】:

    • 感谢您的回答。顺便说一句,我做了另一个很酷的 hack 以使其在开发中发挥作用
    • 我已经添加了我的解决方案,让我知道你的想法:)
    • 啊,是的,ssh 隧道也可以。你会被限制在一个数据库主机上,但我认为你的开发设置只需要那个。
    【解决方案2】:

    我发现了一个很酷的 hack,它通过一些调整非常适合我的开发目的,我知道我的生产环境不需要它。

    因此,我们知道 Aurora Serverless 仅在 VPC 内部工作。因此,请确保您尝试连接到 VPC 中的 Aurora,并且分配给 Aurora 集群的安全组具有允许访问的适当规则。正如我之前提到的,我已经拥有一个 EC2 实例、Aurora Serverless 和一个围绕这两者的 VPC。所以我可以从我的 EC2 访问它,但不能从我的本地 pc/本地 sql 客户端访问它。为了解决这个问题,我做了以下两个步骤。

    1.要从任何客户端访问(在我的例子中是 Navicat),

    一个。首先需要添加 GENERAL 数据库配置,如极光端点主机、用户名、密码等。 湾。然后,需要添加SSH配置,比如EC2机器用户名、hostip和.pem文件路径

    2。要从项目访问,

    首先我以这种方式从我的终端创建一个 ssh 隧道

    ssh ubuntu@my_ec2_ip_goes_here -i rnd-vrs.pem -L 5555:database-1.my_aurora_cluster_url_goes_here.us-west-2.rds.amazonaws.com:5432
    

    然后像这样使用 db 配置运行我的项目 test.php,

    $conn = pg_connect("host=127.0.0.1 port=5555 dbname=postgres user=postgres password=password_goes_here");
    
    // other code goes here to get data from your database
    if (!$conn) {
        echo "An error occurred.\n";
        exit;
    }
    
    $result = pg_query($conn, "SELECT * FROM brands");
    if (!$result) {
        echo "An error occurred.\n";
        exit;
    }
    
    while ($row = pg_fetch_row($result)) {
        echo "Brand Id: $row[0]  Brand Name: $row[1]";
        echo "<br />\n";
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 2023-04-08
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多