欢迎来到雲闪世界。我一直觉得aws cli使用起来很麻烦。很难记住命令和参数,而且输出内容笨拙且晦涩难懂。因此,您通常必须一遍又一遍地查阅文档,这非常繁琐。
然而,最近我发现 AWS CLI 的一个内置功能改变了这一切:自动提示模式
自动提示模式是 AWS CLI 的按需内置 UI,您可以使用它以交互方式构建 AWS 命令。
下面是一个实际示例:
如果以上内容看起来有点快,请不要担心,本文将详细介绍 AWS CLI 自动提示模式的所有功能。
如果您了解AWS Shell,并且认为自动提示模式与其非常相似,那么您是对的。这些工具有很多共同点。AWS CLI 的创建者在这篇文章中解释了它们的关系。简而言之,AWS CLI 自动提示模式旨在取代 AWS Shell。
设置
您无需安装任何东西即可使用 AWS CLI 自动提示模式。它默认包含在 AWS CLI 中(自 v2 起)。
您只需要启用它,可以通过在文件中添加以下行来实现~/.aws/config
:
[我的个人资料] #... cli_auto_prompt = on-partial
现在,每当您在终端中输入不完整或无效的 AWS 命令并按Enter时,自动提示模式就会启动。
的第二个可能值为
cli_auto_prompt
。on
在这种情况下,每个 AWS 命令都会触发自动提示模式,而不仅仅是不完整或无效的命令。文档中对此进行了解释。
现在,我们来看看自动提示模式提供的功能。
建议和补充
自动提示模式最明显的特点是根据您当前输入的内容自动提供建议和完成。
要进入自动提示模式,最简单的方法就是aws
在命令行中输入,然后按Enter键:
亚马逊
自动提示模式现在会立即开始显示一个下拉框,其中包含基于您迄今为止输入的内容的建议。请注意,建议会在您输入时更新:
您可以使用Tab和Shift-Tab或箭头键在列表中上下移动并选择建议。要将建议插入命令中,您可以使用Space键或Enter。
自动提示模式为命令、参数、静态值甚至动态值(例如资源名称和 ID)提供建议。
虽然文档中说此功能已实现,但动态值的完成并不总是有效。请参阅下面的。
请注意,补全建议基于模糊搜索,而不是精确前缀匹配。这意味着,您可以输入如下内容:
AWS EC2 实例
并且建议包括诸如run-instances
、、等命令stop-instances
。describe-instances
同样,对于参数,您不需要以 开头--
。您可以键入类似的内容,如果上下文允许,type
自动提示模式会正确地建议您,例如参数。--instance-type
这样你就不用记住命令或参数的拼写细节了。只需输入你能记住的内容,然后从列表中选择所需的内容即可。
完成命令组合后,只需按Enter即可执行该命令。
请注意,编辑命令时,您可以使用与 shell 中相同的行编辑命令。例如,Ctrl-A 和 Ctrl-E 用于移动到行首或行末,Ctrl-W 用于删除最后一个单词等。
单是建议和完成功能就已经可以为您节省大量时间(和精力)。现在您总是知道可以使用哪些命令和参数,而不必再在文档中反复查找这些内容。
然而,这还不是全部!
文档
自动提示模式包括 AWS CLI 的完整文档,它可以根据您输入的内容动态地向您显示。
当您处于自动提示模式时,按F3开始。
如果您是Mac用户,使用功能键(F1、F2 等)会有点不方便,因为需要按住“fn”键。但是,免费软件世界可以满足您的需求!安装一个小工具,该工具允许您暂时锁定功能键,这样您无需按“fn”键即可键入它们。
出现一个名为Doc Panel的新面板。此面板显示当前命令提示符中的命令的文档。它与您在普通 AWS CLI 中附加help
到任何命令时获得的文档相同。
再次强调,文档的内容会随着您的输入而动态更新。例如,当您向命令添加子命令时,面板的内容会从命令的文档切换到子命令的文档:
您可以按F2将光标移动到Doc Panel。在DocPanel中,您可以使用与less
和more
分页器中类似的命令在文档中导航。
例如:
j
:向下一行k
:上行z
:向下翻页w
:向上翻一页g
:返回顶部G
:转到底部
您还可以在文档中搜索:
/
:从光标处向下搜索?
:从光标向上搜索n
:转到下一场比赛N
:转到上一个匹配项
提示:当光标聚焦在文档面板上时,您可以随时按 F1 来显示这些键盘快捷键。
要将光标改回命令,请再次按F2(您也可以随时按q
将焦点移回命令)。
要隐藏文档面板,您可以再次按F3。
文档功能意味着如果您仍然需要在文档中查找某些内容(尽管有自动建议和补全功能),文档就在那里,为您打开正确的页面。无需再切换到另一个终端窗口。
到目前为止看起来已经很棒了——然而,还有更多!
输出
众所周知,AWS API 对大多数请求的响应都是返回 JSON 对象,而这些 JSON 对象往往相当大且结构不透明(这是对 AWS 用户体验的一般比喻吗?)。
有时你需要进一步处理这些响应对象,比如从中提取一些信息。所以你确实需要知道这些响应对象是什么样子的。然而,在文档中查找这些东西是非常繁琐的。
这就是 AWS CLI 自动提示模式的输出功能的用武之地。为了演示它,在自动提示模式下输入以下内容:
aws ec2 描述实例
然后按F5。
这将打开一个名为“输出面板”的新面板:
describe-instances
该面板显示您刚刚输入的命令的响应对象的结构。
那有多酷?
现在,您可以清楚地知道执行命令时会得到什么,而无需在文档中查找任何内容!
您可以通过按 F2 将光标移动到输出面板。在输出面板中,您可以使用 和 进行搜索,/
还可以分别使用Ctrl-P和Ctrl-N?
上下移动光标。
Ctrl-P 和 Ctrl-N 快捷键没有正式记录。一般来说,输出面板的导航选项比文档面板少。这是自动提示模式的另一个注意事项,在下面的注意事项中进行了描述。
但情况会变得更好!
在进行客户端过滤时,你需要了解响应对象的结构,例如,从响应中提取一些信息。
AWS CLI 中的客户端过滤是通过--query
接受JMESPath表达式的参数完成的。JMESPath 表达式用于查询和转换响应 JSON 对象。
自动提示模式提供高达这一细节级别的支持!为了演示这一点,请像这样扩展您的命令:
aws ec2 描述实例--查询
此时,建议框根据响应对象显示 JMESPath 表达式的可能标识符。
继续输入以下 JMESPath 表达式:
aws ec2 describe-instances --query Reservations[].Instances[].[InstanceId,InstanceType]
了解 JMESPath 查询语言的一个好方法是JMESPath教程。还可以查看JMESPath终端,它允许您以交互方式使用 JMESPath 表达式。
并在键入时观察输出面板。
输出面板会在您编辑 JMESPath 表达式时更新,并且始终显示您现在执行命令时将获得的最终输出:
这不是很神奇吗?总而言之,您可以获得以下所有好处:
- 您眼前就有响应对象,因此您不需要在其他地方查找它来创建 JMESPath 表达式。
- 自动提示模式为您的 JMESPath 表达式提供具体的标识符,使构建表达式变得更加容易。
- 输出面板不断显示 JMESPath 表达式将返回的实际对象结构。
这甚至还有进一步的好处。
无论 JMESPath 表达式是否有效,您都会立即收到反馈。如果您犯了错误,例如标识符拼写错误或语法错误,这会立即反映在输出面板中。要么是值null
,要么是空的输出对象,要么是错误消息。
总而言之,自动提示模式的输出功能非常有价值!
客户端过滤是使用 AWS CLI 的关键部分,因为 AWS 响应对象通常很笨重,需要分解才能更方便地使用。对于该任务,您无法绕过使用参数--query
和 JMESPath 表达式过滤输出。
输出功能消除了创建这些 JMESPath 表达式的大量繁琐工作,并使其变得更容易、更快捷、更省心!
历史
自动提示模式还有一个有用的功能:命令历史记录。
它类似于shell中的命令历史记录,并在自动提示模式下显示您以前执行过的所有命令。
要触发它,请输入Ctrl-R:
出现一个下拉框,这个下拉框里包含了你之前执行过的所有命令。
您可以使用Tab / Shift-Tab或箭头键在列表中移动来直接选择命令。
不过,模糊搜索功能更加有用。只需继续输入,列表就会缩小到与您输入的内容相匹配的命令。
例如,如果你想重新运行describe-key-pairs
很久以前执行过的列出密钥对的命令,你只需键入key
,列表就会显示包含该字符串的所有命令key
。这使得快速找到所需命令变得非常容易。
您可以使用Space或Enter 键将命令插入提示符中。这仍然允许您在执行命令之前对其进行编辑。
看完所有好东西后,现在让我们看看一些注意事项。
注意事项
AWS CLI 自动提示模式是一个非常有用的工具。然而,和所有事物一样,它也有一些缺点。
以下是我目前发现的注意事项:
- 输出面板没有足够的导航选项。只有使用未记录的Ctrl-N和Ctrl-P键绑定(GitHub 上的开放问题)才可以进行滚动。
- 自动提示模式下执行的命令不包含在 shell 历史记录中(GitHub 上的开放问题)。
- 自动提示模式在每条命令后终止。连续几条命令保持在自动提示模式可能会很有用,类似于 AWS Shell 中的体验(GitHub 上的开放问题)。
- 按键绑定无法自定义。某些按键绑定可能对某些用户不方便,例如 Mac 用户的功能键(在 GitHub 上打开问题)。
- 没有与 shell 集成。这意味着,无法将输出重定向到文件或管道、使用 shell 变量或使用
for
循环或其他 shell 构造。 - JMESPath 表达式的自动完成功能仅适用于简单表达式。如果表达式变得更复杂,则不会再提供建议。
- 动态值(例如资源名称或 ID)的自动完成并非在所有情况下都有效。
如您所见,其中的许多警告已经在相应的GitHub 存储库中存在未解决的问题。
自动提示模式的创建团队似乎非常专注且反应迅速。因此,这些问题很有可能会在某个时候得到修复。
结论
自动提示模式是AWS CLI 的一个鲜为人知的功能,然而,这是一个遗憾,因为它是一个真正的游戏规则改变者!
就其本身而言,AWS CLI 的使用非常麻烦。很难记住命令和参数,也很难创建输出过滤器。这会带来一些后果。我经常觉得使用 AWS CLI 的繁琐性阻碍了我熟练掌握和熟悉整个 AWS。
自动提示模式可以改变这一点!它消除了使用 AWS CLI 的大量麻烦。它几乎可以为您提供所需的所有信息。
即使使用自动提示模式的 AWS CLI 仍然不是一种纯粹的乐趣,但它已经不那么糟糕了!
这已经是一个巨大的进步了!
附录:在 macOS 上锁定功能键
AWS CLI 自动提示模式大量使用功能键(F1、F2等)。在 Apple 键盘上,键入功能键需要按住fn键,这可能有点不方便。
Fluor是一个小型的 macOS 工具,可以暂时锁定功能键,以便您无需按fn键即可键入它们。
您可以使用以下方式安装:
一旦安装,该工具会在菜单栏中添加一个图标。
在这个菜单中,我建议将触发器字段设置为最右边的选项:
通过按fn键可以在默认模式和功能锁定模式之间切换。
当前模式始终通过图标指示:
默认模式处于活动状态。
功能锁定模式处于活动状态。
这样,当您使用 AWS CLI 自动提示模式时,您可以轻松地将键盘切换到功能锁定模式。并且您只需再次按下 fn键即可轻松将一切恢复正常。
感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)
订阅频道(https://t.me/awsgoogvps_Host)
TG交流群(t.me/awsgoogvpsHost)