Aurora DSQL 入门
Amazon Aurora DSQL 是一个针对事务性工作负载进行了优化的无服务器、分布式关系数据库。在以下各节中,您将了解如何创建单区域和多区域 Aurora DSQL 集群、连接到这些集群以及如何创建和加载示例架构。您将使用 AWS Management Console访问集群,并使用 psql
实用程序与数据库进行交互。最后,您将设置好正常运行的 Aurora DSQL 集群,并可用于测试或生产工作负载。
主题
先决条件
在可以开始使用 Aurora DSQL 之前,确保满足以下先决条件:
-
您的 IAM 身份必须具有 sign in to the AWS Management Console 的权限。
-
您的 IAM 身份必须满足以下任一条件:
-
对 AWS 账户中的任何资源执行任何操作的访问权限
-
IAM 权限
iam:CreateServiceLinkedRole
和能够访问 IAM 策略操作dsql:*
-
-
如果您在类似 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 Downloadspsql
的更多信息,请参阅 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 \ --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 访问 Aurora DSQL
DBeaver 是一个基于 GUI 的开源数据库工具。可以使用它来连接和管理数据库。要下载 DBeaver,请访问 DBeaver 社区网站上的下载页面
在 DBeaver 中设置新的 Aurora DSQL 连接
-
选择新建数据库连接。
-
在新建数据库连接窗口中,选择 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 连接
-
选择新建数据来源,然后选择 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 中创建单区域集群
-
登录 AWS Management Console并打开 Aurora DSQL 控制台,网址为 https://console.aws.amazon.com/dsql
。 -
选择创建集群,然后选择单区域。
-
(可选)在集群设置中,选择以下任一选项:
-
选择自定义加密设置(高级)以选择或创建 AWS KMS key。
-
选择启用删除保护以防止删除操作移除您的集群。默认情况下,删除保护功能处于选中状态。
-
-
(可选)在标签中,选择或输入此集群的标签。
-
选择创建集群。
步骤 2:连接到 Aurora 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 \ --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 命令
-
创建名为
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 Three 的销售额最高。
name | sum_amount --------------------------+-------------------- Example Department Three | 54061.67752854594 Example Department Seven | 53869.65965365204 Example Department Eight | 52199.73742066634 Example Department One | 52034.078869900826 Example Department Six | 50886.15556256385 Example Department Two | 50589.98422247931 Example Department Five | 49549.852635496005 Example Department Four | 49266.15578027619 (8 rows)
步骤 4:创建多区域集群
创建多区域集群时,您指定以下区域:
- 远程区域
-
这是您在其中创建第二个集群的区域。您在此区域中创建第二个集群,并使其与初始集群对等。Aurora DSQL 将初始集群上的所有写入内容复制到远程集群。您可以在任何集群上进行读取和写入。
- 见证区域
-
该区域接收写入多区域集群的所有数据。但是,见证区域不托管客户端端点,也不提供用户数据访问。在见证区域中维护着有限时段的加密事务日志。此日志有助于恢复,并在某个区域变为不可用时支持事务仲裁。
以下示例说明如何创建初始集群,在不同的区域中创建第二个集群,然后使两个集群对等以创建多区域集群。它还演示了来自这两个区域端点的跨区域写入复制和一致读取。
创建多区域集群
-
登录 AWS Management Console并打开 Aurora DSQL 控制台,网址为 https://console.aws.amazon.com/dsql
。 -
在导航窗格中,选择集群。
-
选择创建集群,然后选择多区域。
-
(可选)在集群设置中,为初始集群选择以下任一选项:
-
选择自定义加密设置(高级)以选择或创建 AWS KMS key。
-
选择启用删除保护以防止删除操作移除您的集群。默认情况下,删除保护功能处于选中状态。
-
-
在多区域设置中,为初始集群选择以下选项:
-
在见证区域中,选择一个区域。目前,多区域集群中的见证区域仅支持位于美国的区域。
-
(可选)在远程区域集群 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 GROUP BY name HAVING sum(amount) > 0 ORDER BY sum_amount DESC;