借助 (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 资源提供了一个有效的学习环境:
本文将主要集中在帮助您更快学习 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 格式的文档形式呈现。该 JSON 文档表示一个嵌套数据结构。使用 的 JSON 知识表示法对 AWS CLI输出进行一系列转换。获取此答案的过程是将集群列表转化为我们关心的单个集群,然后将属性列表转化为保存答案的特定属性。您可以使用以下命令,替换您的集群名称替代
my-db-cluster`:
bash $ aws rds describe-db-clusters --query '*,无论键名是什么。输出结果是一个数组,有
。目前,让我们坚持使用平等测试,检查某一属性是否等于一个字面值。字面值用反引号引用。例如,您可能运行一个 describe
命令,仅返回具有某个属性(如 Engine
、EngineVersion
或 Status
)的值为特定值的项:
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
时,该表不包括列标题。
--output json
选项是默认的。如果您打算存储输出以供后续使用,将其用作编写能够处理 JSON 的程序的输入,或者存储在具备 JSON文档解析功能的数据库中,则应使用此格式。
如果输出是纯粹为了视觉检查,--output table
选项是方便的。四周的线条和边框使得格式一致且易于浏览。您不会将这种格式用于需要解析输出的任何其他程序,如 grep
或
awk
。您可能直接将其复制到使用等宽字体的报告中。
--output text
选项适用于当您只需要少量输出列、且其含义易于理解时。例如,每行输出可能是数据库或集群标识符加上一两个其他属性,例如端点、引擎版本、状态或亚马逊资源名称(ARN)。这种
Leave a Reply