解锁 AWS CLI 在 Amazon

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

关键要点

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

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

这是一个系列文章的第一部分,之后的文章将教您如何创建自己的管理和报告工具,处理一些超出基本创建-修改-删除循环的场景。通过这些技术,您可以迅速编写 AWSCLI 命令,以解决有关 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 账户中,拥有一些 AWS 托管数据库(例如 Aurora DB 集群或 RDS DB 实例)会更有帮助。

AWS CLI 命令的 JSON 输出

当 AWS CLI 命令生成输出时,默认以 JSON 格式的文档形式呈现。该 JSON 文档表示一个嵌套数据结构。使用 的 JSON 知识表示法对 AWS CLI输出进行一系列转换。获取此答案的过程是将集群列表转化为我们关心的单个集群,然后将属性列表转化为保存答案的特定属性。您可以使用以下命令,替换您的集群名称替代my-db-cluster`:

bash $ aws rds describe-db-clusters --query '*,无论键名是什么。输出结果是一个数组,有 。目前,让我们坚持使用平等测试,检查某一属性是否等于一个字面值。字面值用反引号引用。例如,您可能运行一个 describe 命令,仅返回具有某个属性(如 EngineEngineVersionStatus)的值为特定值的项:

bash $ aws rds describe-db-clusters --query '*[] | [?DBClusterIdentifier == my-db-cluster] | [].{DBClusterIdentifier:DBClusterIdentifier,Engine:Engine,EngineVersion:EngineVersion}' [ { "DBClusterIdentifier": "my-db-cluster", "Engine": "aurora-postgresql", "EngineVersion": 14.6 } ]

查找单个项的另一种方法

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


{ "DBClusterIdentifier": "my-db-cluster", "Engine": "aurora-postgresql",
"EngineVersion": 14.6 } ```

### 最后的结构解包

在上一个示例中,最终阶段的 `[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 describe-db-instances \ \--query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,Engine:Engine,EngineVersion:EngineVersion} | [0:6]' \ \--output table

* * *

| DescribeDBInstances | +----------------------+---------------------+-----------------+ | DBInstanceIdentifier | Engine | EngineVersion | +----------------------+---------------------+-----------------+ | apg11-instance | aurora-postgresql | 11.17 | | apg12-instance | aurora-postgresql | 12.12 | | apg12-instance-b | aurora-postgresql | 12.12 | | apg13-instance | aurora-postgresql | 13.8 | | apg14-instance | aurora-postgresql | 14.6 | | apg15-instance-1 | aurora-postgresql | 15.2 | +----------------------+---------------------+-----------------+ ```

### 使用 `--output text` 生成纯文本输出

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

```bash $ aws rds describe-db-instances \ \--query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,Engine:Engine,EngineVersion:EngineVersion} | [0:6]' \ \--output text

apg11-instance aurora-postgresql 11.17 apg12-instance aurora-postgresql 12.12apg12-instance-b aurora-postgresql 12.12 apg13-instance aurora-postgresql 13.8apg14-instance aurora-postgresql 14.6 apg15-instance-1 aurora-postgresql 15.2

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

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

'*[].[DBInstanceIdentifier,Engine,EngineVersion]' --output text

apg11-instance aurora-postgresql 11.17 apg12-instance aurora-postgresql 12.12apg12-instance-b aurora-postgresql 12.12 apg13-instance aurora-postgresql 13.8apg14-instance aurora-postgresql 14.6 apg15-instance-1 aurora-postgresql 15.2

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

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

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

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

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

Leave a Reply

Required fields are marked *