相关文章推荐

如果您在类似 Unix 的环境中使用 AWS CLI,请确保安装 Python 版本 3.8+ 和 psql 版本 14+。要检查应用程序版本,请运行以下命令。

python3 --version psql --version

如果您在不同的环境中使用 AWS CLI,请务必手动设置 Python 版本 3.8+ 和 psql 版本 14+。

如果您打算使用 AWS CloudShell 访问 Aurora DSQL,则所提供的 Python 版本 3.8+ 和 psql 版本 14+ 无需额外的设置。有关 AWS CloudShell 的更多信息,请参阅 什么是 AWS CloudShell?

如果您打算使用 GUI 访问 Aurora DSQL,请使用 DBeaver 或 JetBrains DataGrip。有关更多信息,请参阅 使用 DBeaver 访问 Aurora DSQL 和 使用 JetBrains DataGrip 访问 Aurora DSQL 。

访问 Aurora DSQL

您可以通过以下方法访问 Aurora DSQL。要了解如何使用 CLI、API 和 SDK,请参阅 访问 Aurora DSQL 。

通过 AWS Management Console访问 Aurora DSQL

您可以访问 Aurora DSQL 的 AWS Management Console,网址为 https://console.aws.amazon.com/dsql 。

使用 SQL 客户端访问 Aurora DSQL

Aurora DSQL 使用 PostgreSQL 协议。在连接到集群时,通过提供签名的 IAM authentication token 作为密码,使用您首选的交互式客户端。身份验证令牌是 Aurora DSQL 使用 AWS 签名版本 4 动态生成的唯一字符串。

Aurora DSQL 仅将此令牌用于身份验证。建立连接后,令牌不会影响连接。如果您尝试使用过期的令牌重新连接,则连接请求将遭到拒绝。有关更多信息,请参阅 在 Amazon Aurora DSQL 中生成身份验证令牌 。

使用 psql 访问 Aurora DSQL(PostgreSQL 交互式终端)

psql 实用程序是 PostgreSQL 的基于终端的前端。它使您能够以交互方式键入查询,向 PostgreSQL 发出查询,然后查看查询结果。要缩短查询响应时间,请使用 PostgreSQL 版本 17 客户端。

从 PostgreSQL Downloads 页面下载操作系统的安装程序。有关 psql 的更多信息,请参阅 https://www.postgresql.org/docs/current/app-psql.htm 。

如果您已经安装了 AWS CLI,请使用以下示例连接到集群。您可以使用预安装了 psql 的 AWS CloudShell,也可以直接安装 psql 。

# Aurora DSQL requires a valid IAM token as the password when connecting. # Aurora DSQL provides tools for this and here we're using Python. export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token \ --region us-east-1 \ --expires-in 3600 \ --hostname your_cluster_endpoint) # Aurora DSQL requires SSL and will reject your connection without it. export PGSSLMODE=require # Connect with psql, which automatically uses the values set in PGPASSWORD and PGSSLMODE. # Quiet mode suppresses unnecessary warnings and chatty responses but still outputs errors. psql --quiet \ --username admin \ --dbname postgres \ --host your_cluster_endpoint

使用 DBeaver 访问 Aurora DSQL

DBeaver 是一个基于 GUI 的开源数据库工具。可以使用它来连接和管理数据库。要下载 DBeaver,请访问 DBeaver 社区网站上的 下载页面 。以下步骤解释了如何使用 DBeaver 连接到集群。

在 DBeaver 中设置新的 Aurora DSQL 连接
  1. 选择 新建数据库连接 。

    在 新建数据库连接 窗口中,选择 PostgreSQL。

    在 连接设置/主要 选项卡中,选择 连接方式:主机 ,然后输入以下信息。

    主机 :使用您的集群端点。

    数据库 :输入 postgres

    身份验证 :选择 Database Native

    用户名 :输入 admin

    密码 :生成 身份验证令牌 。复制生成的令牌并将其用作密码。

    忽略所有警告,并将身份验证令牌粘贴到 DBeaver 密码 字段中。

    注意

    您必须在客户端连接中设置 SSL 模式。Aurora DSQL 支持 SSLMODE=require 。Aurora DSQL 在服务器端强制执行 SSL 通信,并拒绝非 SSL 连接。

    您应该已连接到集群,并可以开始运行 SQL 语句。

    重要

    DBeaver 为 PostgreSQL 数据库提供的管理功能(如 会话管理器 和 锁定管理器 )由于其独特的架构而不适用于数据库。虽然这些屏幕可供访问,但它们不提供有关数据库运行状况或状态的可靠信息。

    DBeaver 的身份验证凭证到期

    已建立的会话会在最多 1 小时内保持身份验证状态,或者直至 DBeaver 断开连接或超时。要建立新连接,请在 连接设置 的 密码 字段中提供有效的身份验证令牌。尝试打开新会话(例如,列出新表或新的 SQL 控制台)会强制尝试新的身份验证。如果在 连接设置 中配置的身份验证令牌不再有效,则该新会话将失败,并且 DBeaver 使所有先前打开的会话变为无效。使用 expires-in 选项选择 IAM 身份验证令牌的持续时间时,请记住这一点。

    使用 JetBrains DataGrip 访问 Aurora DSQL

    JetBrains DataGrip 是一款跨平台 IDE,用于处理 SQL 和数据库,包括 PostgreSQL。DataGrip 包含一个强大的图形用户界面和一个智能 SQL 编辑器。要下载 DataGrip,请前往 JetBrains 网站上的 下载页面 。

    在 JetBrains DataGrip 中设置新的 Aurora DSQL 连接
    1. 选择 新建数据来源 ,然后选择 PostgreSQL。

      在“数据来源/常规”选项卡中,输入以下信息:

      主机 :使用您的集群端点。

      端口 :Aurora DSQL 使用 PostgreSQL 默认值: 5432

      数据库 :Aurora DSQL 使用 PostgreSQL 默认值 postgres

      身份验证 :选择 User & Password 。

      用户名 :输入 admin 。

      密码 : 生成令牌 并将其粘贴到此字段中。

      URL :请勿修改此字段。它将根据其它字段自动填充。

      密码 :通过生成身份验证令牌来提供密码。复制令牌生成器的结果输出,并将其粘贴到密码字段中。

      注意

      您必须在客户端连接中设置 SSL 模式。Aurora DSQL 支持 PGSSLMODE=require 。Aurora DSQL 在服务器端强制执行 SSL 通信,并将拒绝非 SSL 连接。

      您应该已连接到集群,并可以开始运行 SQL 语句:

      重要

      DataGrip 为 PostgreSQL 数据库提供的某些视图(例如会话)由于其独特的架构而不适用于数据库。虽然这些屏幕可供访问,但它们不提供有关连接到数据库的实际会话的可靠信息。

      身份验证凭证到期

      已建立的会话会在最多 1 小时内保持身份验证状态,或者直到出现显式断开连接或客户端超时。如果需要建立新连接,则必须在 数据来源属性 的 密码 字段中生成并提供新的身份验证令牌。尝试打开新会话(例如,列出新表或新的 SQL 控制台)会强制尝试新的身份验证。如果在 连接 设置中配置的身份验证令牌不再有效,则该新会话将失败,并且所有先前打开的会话将变为无效。

      将 PostgreSQL 协议与 Aurora DSQL 结合使用

      PostgreSQL 使用基于消息的协议在客户端和服务器之间进行通信。可通过 TCP/IP 以及 Unix 域套接字支持该协议。下表显示了 Aurora DSQL 如何支持 PostgreSQL protocol 。

      PostgreSQL Aurora DSQL 角色(也称为用户或组) 数据库角色 Aurora DSQL 为您创建一个名为 admin 的角色。当您创建自定义数据库角色时,您必须使用 admin 角色将其与 IAM 角色关联,以便在连接到集群时进行身份验证。有关更多信息,请参阅 配置自定义数据库角色 。 主机(也称为主机名或主机规格) Aurora DSQL 单区域集群提供单个托管式端点,当区域内出现不可用性问题时会自动重定向流量。 不适用:使用默认值 5432 这是 PostgreSQL 默认值。 数据库(dbname) 使用 postgres Aurora DSQL 会在您创建集群时为您创建此数据库。 SSL 模式 始终在服务器端启用 SSL 在 Aurora DSQL 中,Aurora DSQL 支持 require SSL 模式。Aurora DSQL 会拒绝没有 SSL 的连接。 身份验证令牌 Aurora DSQL 需要临时身份验证令牌,而不是长期密码。要了解更多信息,请参阅 在 Amazon Aurora DSQL 中生成身份验证令牌 。

      步骤 1:创建 Aurora DSQL 单区域集群

      Aurora DSQL 的基本单元是集群,您可以在其中存储数据。在本任务中,您将在单个 AWS 区域中创建集群。

      在 Aurora DSQL 中创建单区域集群
      1. 登录 AWS Management Console并打开 Aurora DSQL 控制台,网址为 https://console.aws.amazon.com/dsql 。

        选择 创建集群 ,然后选择 单区域 。

        (可选)在 集群设置 中,选择以下任一选项:

        步骤 2:连接到 Aurora DSQL 集群

        当您根据 Aurora DSQL 集群的集群 ID 和区域创建集群时,会自动生成 集群端点 。命名格式为 clusterid .dsql. region .on.aws 。客户端使用端点来创建与集群的网络连接。

        身份验证是使用 IAM 进行管理的,因此您不需要在数据库中存储凭证。 身份验证令牌 是自动生成的唯一字符串。令牌仅用于身份验证,在建立连接后不会影响连接。在尝试连接之前,请确保 IAM 身份具有 dsql:DbConnectAdmin 权限,如 先决条件 中所述。

        注意

        要优化数据库连接速度,请使用 PostgreSQL 版本 17 客户端并将 PGSSLNEGOTIATION 设置为 direct: PGSSLNEGOTIATION=direct 。

        使用身份验证令牌连接到集群
        1. 在 Aurora DSQL 控制台中,选择要连接到的集群。

          选择 连接 。

          从 端点(主机) 复制端点。

          确保在 身份验证令牌(密码) 部分中选择 以管理员身份连接 。

          复制生成的身份验证令牌。此令牌的有效期为 15 分钟。

          在操作系统命令行上,使用以下命令来启动 psql 并连接到集群。将 your_cluster_endpoint 替换为您之前复制的集群端点。

          PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --host your_cluster_endpoint

          当提示输入密码时,请输入您之前复制的身份验证令牌。如果您尝试使用过期的令牌重新连接,则连接请求将遭到拒绝。有关更多信息,请参阅 在 Amazon Aurora DSQL 中生成身份验证令牌 。

          按 Enter 键。您应该看到 PostgreSQL 提示符。

          postgres=>

          如果您收到拒绝访问错误,请确保您的 IAM 身份具有 dsql:DbConnectAdmin 权限。如果您拥有此权限,但继续收到拒绝访问错误,请参阅 排查 IAM 问题 和 如何使用 IAM 策略解决“访问被拒绝”或“未经授权的操作”错误?

          步骤 3:在 Aurora DSQL 中运行示例 SQL 命令

          通过运行 SQL 语句测试 Aurora DSQL 集群。以下示例语句需要名为 department-insert-multirow.sql 和 invoice.csv 的数据文件,您可以从 GitHub 上的 aws-samples/aurora-dsql-samples 存储库中下载这些文件。

          在 Aurora DSQL 中运行示例 SQL 命令
          1. 创建名为 example 的架构。

            CREATE SCHEMA example;

            创建使用自动生成的 UUID 作为主键的 invoice 表。

            CREATE TABLE example.invoice( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), created timestamp, purchaser int, amount float);

            创建使用空表的二级索引。

            CREATE INDEX ASYNC invoice_created_idx on example.invoice(created);

            创建 department 表。

            CREATE TABLE example.department(id INT PRIMARY KEY UNIQUE, name text, email text);

            使用命令 psql \include 加载您从 GitHub 上的 aws-samples/aurora-dsql-samples 存储库下载的名为 department-insert-multirow.sql 的文件。将 my-path 替换为本地副本的路径。

            \include my-path/department-insert-multirow.sql

            使用命令 psql \copy 加载您从 GitHub 上的 aws-samples/aurora-dsql-samples 存储库下载的名为 invoice.csv 的文件。将 my-path 替换为本地副本的路径。

            \copy example.invoice(created, purchaser, amount) from my-path/invoice.csv csv

            查询各部门并按总销售额对各部门进行排序。

            SELECT name, sum(amount) AS sum_amount FROM example.department LEFT JOIN example.invoice ON department.id=invoice.purchaser GROUP BY name HAVING sum(amount) > 0 ORDER BY sum_amount DESC;

            以下示例输出显示 Department One 的销售额最高。

            name | sum_amount --------------------------+-------------------- Example Department One | 32628.75608634601 Example Department Three | 32427.43955110429 Example Department Eight | 32256.810987098102 Example Department Five | 31391.14891163639 Example Department Seven | 31253.236846746757 Example Department Six | 29699.06014910414 Example Department Two | 29465.58360076501 Example Department Four | 28764.19185819191 (8 rows)

            步骤 4:创建多区域集群

            创建多区域集群时,您指定以下区域:

            这是您在其中创建第二个集群的区域。您在此区域中创建第二个集群,并使其与初始集群对等。Aurora DSQL 将初始集群上的所有写入内容复制到远程集群。您可以在任何集群上进行读取和写入。

            该区域接收写入多区域集群的所有数据。但是,见证区域不托管客户端端点,也不提供用户数据访问。在见证区域中维护着有限时段的加密事务日志。此日志有助于恢复,并在某个区域变为不可用时支持事务仲裁。

            以下示例说明如何创建初始集群,在不同的区域中创建第二个集群,然后使两个集群对等以创建多区域集群。它还演示了来自这两个区域端点的跨区域写入复制和一致读取。

            创建多区域集群
            1. 登录 AWS Management Console并打开 Aurora DSQL 控制台,网址为 https://console.aws.amazon.com/dsql 。

              在导航窗格中,选择 集群 。

              选择 创建集群 ,然后选择 多区域 。

              (可选)在 集群设置 中,为初始集群选择以下任一选项:

              在 见证区域 中,选择一个区域。目前,多区域集群中的见证区域仅支持位于美国的区域。

              (可选)在 远程区域集群 ARN 中,输入另一个区域中现有集群的 ARN。如果不存在可用作多区域集群中第二个集群的集群,请在创建初始集群后完成设置。

              (可选)为初始集群选择标签。

              选择 创建集群 以创建初始集群。如果您在上一步中未输入 ARN,则控制台会显示 集群设置待处理 通知。

              在 集群设置待处理 通知中,选择 完成多区域集群设置 。此操作会启动在另一个区域中创建第二个集群。

              为第二个集群选择以下选项之一:

              添加远程区域集群 ARN :如果集群存在,并且您希望它成为多区域集群中的第二个集群,请选择此选项。

              在其它区域中创建集群 :选择此选项以创建第二个集群。在 远程区域 中,选择此第二个集群的区域。

              选择 在 your-second-region 中创建集群 ,其中 your-second-region 是第二个集群的位置。控制台将在您的第二个区域中打开。

              (可选)为第二个集群选择集群设置。例如,可以选择 AWS KMS key。

              选择 创建集群 以创建第二个集群。

              选择 在 initial-cluster-region 中对等 ,其中 initial-cluster-region 是托管您创建的第一个集群的区域。

              出现提示时,选择 确认 。此步骤将完成创建多区域集群。

              连接到第二个集群
              1. 打开 Aurora DSQL 控制台,然后选择第二个集群的区域。

                选择 Clusters (集群) 。

                选择多区域集群中的第二个集群所对应的行。

                在 操作 中,选择 在 CloudShell 中打开 。

                选择 以管理员身份进行连接 。

                选择 启动 CloudShell 。

                选择 运行 。

                按照 步骤 3:在 Aurora DSQL 中运行示例 SQL 命令 中的步骤操作来创建示例架构。

                CREATE SCHEMA example; CREATE TABLE example.invoice(id UUID PRIMARY KEY DEFAULT gen_random_uuid(), created timestamp, purchaser int, amount float); CREATE INDEX ASYNC invoice_created_idx on example.invoice(created); CREATE TABLE example.department(id INT PRIMARY KEY UNIQUE, name text, email text);

                使用 psql copy 和 include 命令来加载示例数据。有关更多信息,请参阅 步骤 3:在 Aurora DSQL 中运行示例 SQL 命令 。

                \copy example.invoice(created, purchaser, amount) from samples/invoice.csv csv \include samples/department-insert-multirow.sql
                从托管初始集群的区域中的第二个集群查询数据
                1. 在 Aurora DSQL 控制台中,选择初始集群的区域。

                  选择 Clusters (集群) 。

                  选择多区域集群中的第二个集群所对应的行。

                  在 操作 中,选择 在 CloudShell 中打开 。

                  选择 以管理员身份进行连接 。

                  选择 启动 CloudShell 。

                  选择 运行 。

                  查询您插入到第二个集群的数据。

                  SELECT name, sum(amount) AS sum_amount FROM example.department LEFT JOIN example.invoice ON department.id=invoice.purchaser
 
推荐文章