企业文化

Our News
您的位置: 首页 > 企业文化 > 解锁 AWS CLI 在 Amazon RDS 和 Amazon Aurora 中的强大功能 数据库

解锁 AWS CLI 在 Amazon RDS 和 Amazon Aurora 中的强大功能 数据库

发布时间:2026-01-27 浏览量:20

掌握 AWS CLI 的优势:Amazon RDS 和 Amazon Aurora

关键要点

使用 AWS CLI 可以高效管理 Amazon RDS 和 Aurora。本文将展示如何编写自动化脚本,简化常用数据库操作。掌握 AWS CLI 的查询功能,使输出更为高效与易读。理解 JSON 输出格式及如何提取所需信息,提升数据库管理效率。

借助 AWS 命令行接口AWS CLI,用户可以通过简单的 shell 命令来创建、修改、删除以及生成各种对象的报告,包括数据库实例、Aurora 集群、参数组等。本文将介绍如何使用 AWS CLI 来创建 Aurora 和 Amazon RDS 的自动化脚本。如果您对使用 AWS CLI 命令感到犹豫,因不擅长 JavaScript 对象表示法JSON,或者您在 DevOps 角色中对每个 RDS 资源的每个属性都不熟悉,或者希望生成比 Amazon RDS 控制台提供的更多自动化和定制化报告,那么这篇文章将非常适合您。我们将介绍如何简化 AWS CLI 命令的输出,让其类似 SQL 查询的形式,更易于数据库编程人员和 shell 脚本开发者理解。

白鲸加速器官网链接

这是一个系列文章的第一部分,之后的文章将教您如何创建自己的管理和报告工具,处理一些超出基本创建修改删除循环的场景。通过这些技术,您可以迅速编写 AWS CLI 命令,以解决有关 Aurora 集群、RDS 实例及相关资源如参数组和代理的管理问题。例如,您可以动态构建数据库连接字符串,或循环遍历 Aurora 集群中的所有数据库实例并对每个实例执行相同的操作。

学习 AWS CLI 的意义

AWS CLI 为管理 AWS 资源提供了一个有效的学习环境:

易于进行互动和迭代实验。熟悉 AWS CLI 命令及其选项有助于理清 AWS 控制台上的选择,加速学习过程。学习 AWS CLI 也为使用 Python 和 Java 等编程语言编写管理工具打下基础。您会发现每个语言 SDK 中的 API、参数和数据结构名称与 AWS CLI 中的命令和参数名称相似。了解背后发生的事情,有助于调试问题并利用这些工具的高级功能。

本文将主要集中在帮助您更快学习 AWS CLI 并提升工作效率的一个方面:query 选项中集成的查询语言。掌握 查询表示法 使您能通过操作系统命令行探索 AWS 资源,如数据库集群、数据库实例、版本及实例类别,就像您通过 SQL 客户端工具探索数据库架构一样。

多个 Amazon RDS CLI 命令的名称都带有 describe 前缀。这些命令完全是只读的,相当于数据库的 SELECT 语句。我们在本文的大多数示例中使用这些 describe 语句。

前提条件

要跟随示例操作,您需要安装并配置好 AWS CLI,并输入您的 AWS 凭证和默认区域。某些示例使用的语法需要 AWS CLI v2 的支持。有关安装、升级或配置 AWS CLI 的说明,请参阅 安装或更新最新版本的 AWS CLI。

在您的 AWS 账户中,拥有一些 AWS 托管数据库例如 Aurora DB 集群或 RDS DB 实例会更有帮助。

AWS CLI 命令的 JSON 输出

当 AWS CLI 命令生成输出时,默认以 JSON 格式的文档形式呈现。该 JSON 文档表示一个嵌套数据结构。使用 [ ] 和 { } 的表示法对 JavaScript、Python 和 Java 开发者来说都很熟悉。这些语言都包含 数组在 Python 中称为 列表和 哈希也称为 关联数组、字典 或 键值对。

如果 JSON 格式让您感到复杂,可以将其视为 SQL 结果集的表示。JSON 文档包含一个数组,类似于结果集的行。每个数组元素包含一组键值对,类似列名和值。

第一个 JSON 输出示例

让我们仔细看看 AWS CLI 输出的 JSON 格式结构。这一背景信息将帮助您理解后续示例中是如何简化结构并提取关键信息的。

解锁 AWS CLI 在 Amazon RDS 和 Amazon Aurora 中的强大功能 数据库

例如,以下是 describedbclusters 命令的输出:

bash aws rds describedbclusters{ DBClusters [ { DBClusterIdentifier mydbcluster Engine aurorapostgresql EngineVersion 146 Port 5432

整个文档用 { } 包围,表示最外层是一个键值对集合。只有一个键值对,键名为 DBClusters。DBClusters 对应的值是一个数组,用 [] 包围。每个数组元素代表一个被描述的项,这里是此账户下的一项 Aurora 集群。每个数组元素又是一个用 { } 包围的键值对集合,表示该 Aurora DB 集群的所有属性。

您会在 AWS CLI 命令中多次看到这一模式:输出中有一个唯一的键,其名称取决于命令所操作的资源类型。输出中的关键信息是每个项的属性列表。要提取单个属性,需要解开 JSON 文档的最外层。

AWS CLI 命令的 query 选项

默认情况下,JSON 输出代表您所操作对象的每个属性。如果您只需要从几屏输出中获取一两个信息,这可能会导致信息过载。

为了使输出更易处理,AWS CLI 具有内置查询语言。您可以将查询字符串作为参数传递给几乎所有 AWS CLI 命令的 query 选项。这些查询参数可以简化和重新格式化 JSON 输出,使其易于理解或在其他脚本中使用。作为数据库专业人员,您可能在数据库系统表的 SELECT 语句中执行类似的操作。您可以想象 CLI 命令正在查询由 AWS 管理的高层云资源系统表。

第一次使用 query 选项

我们将之前示例中的 describedbclusters 输出进行简化。我们关注一个特定问题:mydbcluster 的数据库引擎和引擎版本是什么?这时 query 选项派上用场。它使用一种被称为 JMESPath 的 JSON 知识表示法对 AWS CLI 输出进行一系列转换。获取此答案的过程是将集群列表转化为我们关心的单个集群,然后将属性列表转化为保存答案的特定属性。您可以使用以下命令,替换您的集群名称替代 mydbcluster:

bash aws rds describedbclusters query [] [DBClusterIdentifier == mydbcluster] [][DBClusterIdentifierEngineEngineVersion] output text

输出应该是一行用制表符分隔的文本,包含集群名称、引擎名称和版本。例如:

bashmydbcluster aurorapostgresql 146

这个例子引入了 query 参数字符串中的管道概念。查询字符串中用管道符号分隔的每个部分将上一个阶段的输出转换为不同的数组或哈希布局,或应用某些操作,如过滤或排序。我们将在后续文章中看到更高级的示例。因为整个查询字符串被包含在单引号的字符串文本中,我们可以将管道阶段分布在多行上,而无需使用任何行延续字符。

提取结果集的行

让我们分解一下前面示例的 query 字符串,以便理解其含义。

第一步是去掉最外层的键值对。在 Amazon RDS CLI 命令中,输出始终只包含一个元素。这正是初始 [] 操作所做的。它 获取数组,无论键名是什么。输出结果是一个数组,有 [] 分隔符;最外层的哈希用 {} 分隔符被丢弃。

bash aws rds describedbclusters query [][ { DBClusterIdentifier mydbcluster

现在我们已经去掉了外层的 { DBClusters 包装。输出 JSON 文档是一个数组。每个数组元素代表一个 DB 集群的属性。基本上,这是一个用 JSON 表示的 SQL 结果集。

构造列列表

为了简化输出,使其可读性增强,让我们仅提取上一示例结果集中的几个列。您可以使用以下代码,仅查询 DBClusterIdentifier 和 Engine 属性。表示法 []{name1attr1name2attr2} 的含义是将 JSON 文档展平为数组,然后使每个数组元素仅包含在 {} 块中指定名称的属性。

bash aws rds describedbclusters query []{DBClusterIdentifierDBClusterIdentifierEngineEngineEngineVersionEngineVersion}[ { DBClusterIdentifier mydbcluster Engine aurorapostgresql EngineVersion 146 } { DBClusterIdentifier anotherdbcluster Engine auroramysql EngineVersion 80mysqlaurora3023 }

为了使 query 字符串和输出自描述,您可以在每对键值中重复属性名称。这样,属性名称将在 JSON 输出中与该属性的值并排显示。在 {} 块中,不能包含任何空格或换行符。

在初始数组中过滤项

表示法 [thing1 comparisonoperator thing2] 将过滤应用于上一个状态的输出。它只传递符合测试的项。您可以使用多种 JMESPath 过滤表达式。目前,让我们坚持使用平等测试,检查某一属性是否等于一个字面值。字面值用反引号引用。例如,您可能运行一个 describe 命令,仅返回具有某个属性如 Engine、EngineVersion 或 Status的值为特定值的项:

bash aws rds describedbclusters query [] [DBClusterIdentifier == mydbcluster] []{DBClusterIdentifierDBClusterIdentifierEngineEngineEngineVersionEngineVersion}[ { DBClusterIdentifier mydbcluster Engine aurorapostgresql EngineVersion 146 }]

查找单个项的另一种方法

每个 describe 命令都有一个选项可以指定单个项的标识符。这相当于使用主键进行数据库查找。对于 describedbclusters,该选项为 dbclusteridentifier。以下示例检索与前面示例相同的信息,但针对一个特定的 Aurora 集群:

bash aws rds describedbclusters dbclusteridentifier mydbcluster query []{DBClusterIdentifierDBClusterIdentifierEngineEngineEngineVersionEngineVersion} [0]

{ DBClusterIdentifier mydbcluster Engine aurorapostgresql EngineVersion 146}

最后的结构解包

在上一个示例中,最终阶段的 [0] 取出结果数组中的元素。没有这个步骤,输出会多出一个封闭的数组块。当输出确认为单个项时,外层数组是多余的。

选择输出格式:output 选项

使用前面的技术,您可以以所需的 JSON 格式生成 AWS CLI 输出。您可以选择使用何种哈希和数组的嵌套结构。您可以选择每个键值对的键名,然后将输出用 jq 等命令行工具或 Python 等编程语言进行处理,也可以将其存储在数据库中,并使用 PostgreSQL 或 MySQL 中的内置 JSON 函数。

您无需在整个端到端过程中使用 JSON。当您确信 query 字符串生成了正确的输出后,您可以在 AWS CLI 命令中添加 output 选项,以完全隐藏 JSON 格式。

使用 output table 生成格式化报告

您可以使用 output table 选项获得使用 ASCII 线条和框架整齐格式化的输出,类似文本型 SQL 命令行客户端中看到的格式。属性名称成为表头。请参见以下代码:

bash aws rds describedbinstances query []{DBInstanceIdentifierDBInstanceIdentifierEngineEngineEngineVersionEngineVersion} [06] output table

DescribeDBInstances DBInstanceIdentifier Engine EngineVersion apg11instance aurorapostgresql 1117 apg12instance aurorapostgresql 1212 apg12instanceb aurorapostgresql 1212 apg13instance aurorapostgresql 138 apg14instance aurorapostgresql 146 apg15instance1 aurorapostgresql 152

使用 output text 生成纯文本输出

利用同样的 query 字符串,您可以使用 output text 选项获得以制表符分隔列的纯文本输出。您可以将这种纯文本输出输入到传统的基于行的 Unix 工具中,如 grep、cut 和 sort,或其他未准备好处理 JSON 文档的脚本。请参见以下代码:

bash aws rds describedbinstances query []{DBInstanceIdentifierDBInstanceIdentifierEngineEngineEngineVersionEngineVersion} [06] output text

apg11instance aurorapostgresql 1117apg12instance aurorapostgresql 1212apg12instanceb aurorapostgresql 1212apg13instance aurorapostgresql 138apg14instance aurorapostgresql 146apg15instance1 aurorapostgresql 152

由于文本输出不包括任何属性或列名,通常最好在输出较少列、且字段值容易识别的小型输出中使用文本输出。例如,基于文本的输出可以是简单的标识符列表,或标识符加上一两个其他属性。

如果您不需要格式化标签,例如,生成用作 shell 脚本输入的纯文本输出,可以使用数组表示法,例如 [attr1attr2attr3] 作为最终阶段。这个简化版本的命令生成相同的文本输出。

bash aws rds describedbinstances query [][DBInstanceIdentifierEngineEngineVersion] output text

apg11instance aurorapostgresql 1117apg12instance aurorapostgresql 1212apg12instanceb aurorapostgresql 1212apg13instance aurorapostgresql 138apg14instance aurorapostgresql 146apg15instance1 aurorapostgresql 152

使用数组表示法的最终阶段也确保 output table 和 output text 的列按照您指定的顺序打印。当输出包括标签时,列则按标签文本的字母顺序排序。使用数组表示法来强制列顺序的权衡是,output table 时,该表不包括列标题。

何时使用每种 AWS CLI 输出格式

output json 选项是默认的。如果您打算存储输出以供后续使用,将其用作编写能够处理 JSON 的程序的输入,或者存储在具备 JSON 文档解析功能的数据库中,则应使用此格式。

如果输出是纯粹为了视觉检查,output table 选项是方便的。四周的线条和边框使得格式一致且易于浏览。您不会将这种格式用于需要解析输出的任何其他程序,如 grep 或 awk。您可能直接将其复制到使用等宽字体的报告中。

output text 选项适用于当您只需要少量输出列、且其含义易于理解时。例如,每行输出可能是数据库或集群标识符加上一两个其他属性,例如端点、引擎版本、状态或亚马逊资源名称ARN。这种

QQ

在线咨询真诚为您提供专业解答服务

热线

13594780374
7*24小时服务热线

微信

二维码 扫一扫微信交流