之前执行的命令可能很长,里面定义了过滤及输出的逻辑:
aws cloudformation list-stacks \
--query "StackSummaries[?starts_with(StackName, 'cli-workshop')].[StackName,StackStatus]" \
--output text
如果我们经常运行上面的命令,就可以为这些命令创建别名
顶级 CLI 别名的格式为aws <my-alias-name>
.
要定义顶级 AWS CLI 别名,您必须有一个位于~/.aws/cli/alias
的文件,并且该文件的第一行~/.aws/cli/alias
必须包含内容:[toplevel]
。然后可以在文件的后续行中定义别名:
<aliasname> = <command-with-parameters>
例如,假设~/.aws/cli/alias
文件的内容如下:
[toplevel]
whoami = sts get-caller-identity
然后,就可以用whoami
作为运行 sts get-caller-identity
命令的快捷方式:
除了顶级别名之外,还可以在特定命令的命名空间内定义别名。在alias
文件中加入[command (command-name)]
,例如:
[toplevel]
whoami = sts get-caller-identity
[command ec2]
regions = describe-regions
aws ec2 regions
将等价为aws ec2 describe-regions
的命令:
上面我们介绍的是内部别名,它都是基于aws的命令。而外部别名可以让AWS CLI
调用外部命令行。外部进程以!
开头, 例如,给定一个包含以下内容的别名文件:
[toplevel]
show-network = !ifconfig
运行aws show-network
命令,将等价于ifconfig
:
使用这些技巧,我们可以构建高度自定义的 AWS CLI
命令,这些命令可以提高使用 AWS CLI 时的效率
运行aws resourcegroupstaggingapi get-tag-keys
命令,以检索所有已知标签键的列表。
aws resourcegroupstaggingapi get-tag-keys
输出:
上面这个命令实在又臭又长,我们在~/.aws/cli/alias
文件添加一个顶级别名:
[toplevel]
tags = resourcegroupstaggingapi
保存~/.aws/cli/alias
文件, 并尝试新的缩短后的名称tags
,看到与之前相同的输出:
aws tags get-tag-keys
输出:
对于内部别名,默认情况下,我们可以添加其他参数,这些参数将在别名扩展后添加到命令的末尾。例如,我们可以重新运行之前的别名命令并生成文本输出:
aws tags get-tag-keys --output text
输出:
当我们想要接受命令的多个参数时,外部别名非常有用。构造外部别名的推荐方法是将定义封装在函数中,然后立即调用该函数。结构如下所示:
[toplevel]
cfn-deploy =
!f() {
aws cloudformation deploy --template-file "$1" --stack-name "$2" --capabilities CAPABILITY_IAM
}; f
这将我们可以通过运行以下命令来部署 CloudFormation 堆栈:
aws cfn-deploy my-template.yaml MyStackName