如果您在类似 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。要了解如何使用 CLI、API 和 SDK,请参阅 访问 Aurora DSQL 。
您可以访问 Aurora DSQL 的 AWS Management Console,网址为
https://console.aws.amazon.com/dsql
Aurora DSQL 使用 PostgreSQL 协议。在连接到集群时,通过提供签名的 IAM authentication token 作为密码,使用您首选的交互式客户端。身份验证令牌是 Aurora DSQL 使用 AWS 签名版本 4 动态生成的唯一字符串。
Aurora DSQL 仅将此令牌用于身份验证。建立连接后,令牌不会影响连接。如果您尝试使用过期的令牌重新连接,则连接请求将遭到拒绝。有关更多信息,请参阅 在 Amazon Aurora DSQL 中生成身份验证令牌 。
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 \ --regionus-east-1\ --expires-in 3600 \ --hostnameyour_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 \ --hostyour_cluster_endpoint
DBeaver 是一个基于 GUI 的开源数据库工具。可以使用它来连接和管理数据库。要下载 DBeaver,请访问 DBeaver 社区网站上的
下载页面
选择 新建数据库连接 。
在 新建数据库连接 窗口中,选择 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 是一款跨平台 IDE,用于处理 SQL 和数据库,包括 PostgreSQL。DataGrip 包含一个强大的图形用户界面和一个智能 SQL 编辑器。要下载 DataGrip,请前往 JetBrains 网站上的
下载页面
选择 新建数据来源 ,然后选择 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 使用基于消息的协议在客户端和服务器之间进行通信。可通过 TCP/IP 以及 Unix 域套接字支持该协议。下表显示了 Aurora DSQL 如何支持
PostgreSQL protocol
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 中生成身份验证令牌
。
Aurora DSQL 的基本单元是集群,您可以在其中存储数据。在本任务中,您将在单个 AWS 区域中创建集群。
登录 AWS Management Console并打开 Aurora DSQL 控制台,网址为
https://console.aws.amazon.com/dsql
选择 创建集群 ,然后选择 单区域 。
(可选)在 集群设置 中,选择以下任一选项:
当您根据 Aurora DSQL 集群的集群 ID 和区域创建集群时,会自动生成
集群端点
。命名格式为
。客户端使用端点来创建与集群的网络连接。
clusterid
.dsql.
region
.on.aws
身份验证是使用 IAM 进行管理的,因此您不需要在数据库中存储凭证。
身份验证令牌
是自动生成的唯一字符串。令牌仅用于身份验证,在建立连接后不会影响连接。在尝试连接之前,请确保 IAM 身份具有
dsql:DbConnectAdmin
权限,如
先决条件
中所述。
要优化数据库连接速度,请使用 PostgreSQL 版本 17 客户端并将
PGSSLNEGOTIATION
设置为 direct:
PGSSLNEGOTIATION=direct
。
在 Aurora DSQL 控制台中,选择要连接到的集群。
选择 连接 。
从 端点(主机) 复制端点。
确保在 身份验证令牌(密码) 部分中选择 以管理员身份连接 。
复制生成的身份验证令牌。此令牌的有效期为 15 分钟。
在操作系统命令行上,使用以下命令来启动
psql
并连接到集群。将
替换为您之前复制的集群端点。
your_cluster_endpoint
PGSSLMODE=require \ psql --dbname postgres \ --username admin \ --hostyour_cluster_endpoint
当提示输入密码时,请输入您之前复制的身份验证令牌。如果您尝试使用过期的令牌重新连接,则连接请求将遭到拒绝。有关更多信息,请参阅 在 Amazon Aurora DSQL 中生成身份验证令牌 。
按 Enter 键。您应该看到 PostgreSQL 提示符。
postgres=>
如果您收到拒绝访问错误,请确保您的 IAM 身份具有
dsql:DbConnectAdmin
权限。如果您拥有此权限,但继续收到拒绝访问错误,请参阅
排查 IAM 问题
和
如何使用 IAM 策略解决“访问被拒绝”或“未经授权的操作”错误?
通过运行 SQL 语句测试 Aurora DSQL 集群。以下示例语句需要名为
department-insert-multirow.sql
和
invoice.csv
的数据文件,您可以从 GitHub 上的
aws-samples/aurora-dsql-samples
创建名为
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
替换为本地副本的路径。
\includemy-path/department-insert-multirow.sql
使用命令
psql \copy
加载您从 GitHub 上的
aws-samples/aurora-dsql-samples
invoice.csv
的文件。将
my-path
替换为本地副本的路径。
\copy example.invoice(created, purchaser, amount) frommy-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)
创建多区域集群时,您指定以下区域:
这是您在其中创建第二个集群的区域。您在此区域中创建第二个集群,并使其与初始集群对等。Aurora DSQL 将初始集群上的所有写入内容复制到远程集群。您可以在任何集群上进行读取和写入。
该区域接收写入多区域集群的所有数据。但是,见证区域不托管客户端端点,也不提供用户数据访问。在见证区域中维护着有限时段的加密事务日志。此日志有助于恢复,并在某个区域变为不可用时支持事务仲裁。
以下示例说明如何创建初始集群,在不同的区域中创建第二个集群,然后使两个集群对等以创建多区域集群。它还演示了来自这两个区域端点的跨区域写入复制和一致读取。
登录 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
是托管您创建的第一个集群的区域。
出现提示时,选择 确认 。此步骤将完成创建多区域集群。
打开 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
在 Aurora DSQL 控制台中,选择初始集群的区域。
选择 Clusters (集群) 。
选择多区域集群中的第二个集群所对应的行。
在 操作 中,选择 在 CloudShell 中打开 。
选择 以管理员身份进行连接 。
选择 启动 CloudShell 。
选择 运行 。
查询您插入到第二个集群的数据。
SELECT name, sum(amount) AS sum_amount FROM example.department LEFT JOIN example.invoice ON department.id=invoice.purchaser