CLI Alias

之前执行的命令可能很长,里面定义了过滤及输出的逻辑:

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命令的快捷方式:

image-20231202181950746

特定别名

除了顶级别名之外,还可以在特定命令的命名空间内定义别名。在alias文件中加入[command (command-name)],例如:

[toplevel]
whoami = sts get-caller-identity

[command ec2]
regions = describe-regions

aws ec2 regions将等价为aws ec2 describe-regions的命令:

image-20231202182228087

内部和外部别名

上面我们介绍的是内部别名,它都是基于aws的命令。而外部别名可以让AWS CLI 调用外部命令行。外部进程以!开头, 例如,给定一个包含以下内容的别名文件:

[toplevel]
show-network = !ifconfig

运行aws show-network命令,将等价于ifconfig :

image-20231202182746767

使用这些技巧,我们可以构建高度自定义的 AWS CLI 命令,这些命令可以提高使用 AWS CLI 时的效率

一些技巧

使用内部别名来缩短常用服务名称

运行aws resourcegroupstaggingapi get-tag-keys命令,以检索所有已知标签键的列表。

aws resourcegroupstaggingapi get-tag-keys

输出:

image-20231202183000185

上面这个命令实在又臭又长,我们在~/.aws/cli/alias文件添加一个顶级别名:

[toplevel]
tags = resourcegroupstaggingapi

保存~/.aws/cli/alias文件, 并尝试新的缩短后的名称tags,看到与之前相同的输出:

aws tags get-tag-keys

输出:

image-20231202183247739

对于内部别名,默认情况下,我们可以添加其他参数,这些参数将在别名扩展后添加到命令的末尾。例如,我们可以重新运行之前的别名命令并生成文本输出:

aws tags get-tag-keys --output text

输出:

image-20231202183438231

使用外部别名接受参数

当我们想要接受命令的多个参数时,外部别名非常有用。构造外部别名的推荐方法是将定义封装在函数中,然后立即调用该函数。结构如下所示:

[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