AWS CLI
是一个强大的工具,通过命令行可以管理 AWS 服务。除了基础的命令和操作,还有一些”花式玩法”可以让你更高效地使用 AWS CLI。以下是一些建议:
查询 (Query)
使用
--query
参数可以过滤输出结果。这是一个非常有用的功能,尤其当返回的信息很多时。例如,列出所有 EC2 实例的 ID:aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]'
输出格式
AWS CLI 支持多种输出格式,如
json
,text
,table
。你可以使用--output
参数更改输出格式,例如:aws ec2 describe-instances --output table
配置自动补全
AWS CLI 支持命令补全,这可以大大提高你的工作效率。你可以在 bash 或 zsh 中配置自动补全功能。
使用配置文件
除了默认的配置文件,你可以使用
--profile
参数切换到其他的 AWS 配置文件,这在管理多个 AWS 账号时非常有用。aws s3 ls --profile my-other-account
使用 S3 通配符
当使用
aws s3 cp
或aws s3 sync
时,可以使用通配符来匹配多个文件或目录。aws s3 cp s3://my-bucket/path/to/files/ . --recursive --exclude "*" --include "*.jpg"
使用
wait
命令wait
命令可以让 CLI 等待某个 AWS 资源变为特定的状态。例如,等待一个 EC2 实例变为运行状态:aws ec2 wait instance-running --instance-ids i-1234567890abcdef0
生成 CLI 骨架
如果你不确定如何格式化一个特定命令的输入,可以使用
--generate-cli-skeleton
参数来生成一个输入的骨架。例如:aws dynamodb put-item --generate-cli-skeleton
使用
--dry-run
如果你想测试命令是否正确,但不想实际执行它,可以使用
--dry-run
参数。这将验证命令,但不会更改任何资源。批量操作
使用
xargs
可以与 AWS CLI 配合执行批量操作。例如,批量停止所有运行的 EC2 实例:aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text | xargs -I {} aws ec2 stop-instances --instance-ids {}
将输出转为 CSV
结合其他命令行工具,例如 jq
,可以将输出转化为 CSV 格式。例如,列出所有的 EC2 实例并将其转化为 CSV:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, InstanceType, State.Name]' --output json | jq -r '.[] | @csv'
- 使用
--filters
过滤资源
大部分的 describe
命令支持 --filters
参数,这使得你可以基于特定条件过滤资源。例如,列出所有运行中的 EC2 实例:
aws ec2 describe-instances --filters Name=instance-state-name,Values=running
- 将 AWS CLI 结合 Bash 脚本
将 AWS CLI 命令嵌入到 Bash 脚本中,可以自动化复杂的工作流程。例如,定期备份 RDS 快照并删除旧的快照。
- 使用 AWS CLI 与 AWS Systems Manager
你可以使用 AWS CLI 与 Systems Manager 配合,执行命令或查询管理的实例。
aws ssm send-command --instance-ids "i-12345678" --document-name "AWS-RunShellScript" --comment "IP config" --parameters commands=ifconfig
- 流式处理 S3 对象
使用 s3api
命令,你可以流式处理 S3 对象,这在处理大文件时非常有用。
aws s3api get-object --bucket my-bucket --key large-file.txt - | head
- 使用
sts assume-role
切换角色
如果你需要在多个 AWS 账号之间切换或在 AWS Organizations 的不同组织单位之间切换,你可以使用 sts assume-role
。这使得跨账号操作更为简便。
- 记录所有 CLI 操作
使用 --debug
参数可以输出更详细的信息,这对于调试和记录 AWS CLI 操作非常有用。
--filters
和 --query
都是 AWS CLI 的参数,用于从 AWS 服务获取信息时过滤和提取数据。但它们在目的、用法和执行时间上都有所不同。
–filters:
- 目的: 用于过滤 AWS 服务返回的数据。
--filters
参数直接与 AWS 服务进行交互,只返回满足特定条件的数据。 - 执行时间:
--filters
的过滤操作在服务器端执行。也就是说,AWS 服务会在返回数据之前应用这些过滤器。 - 用法示例: 列出所有运行中的 EC2 实例:
aws ec2 describe-instances --filters Name=instance-state-name,Values=running
- 目的: 用于过滤 AWS 服务返回的数据。
–query:
- 目的: 用于从 AWS CLI 返回的结果中提取特定的数据。
--query
参数在本地处理 CLI 返回的结果。 - 执行时间:
--query
的操作在客户端执行。也就是说,AWS CLI 首先从 AWS 服务获取完整的数据,然后在本地应用--query
参数来提取所需的信息。 - 用法示例: 从返回的 EC2 描述中提取所有实例的 ID:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId'
- 目的: 用于从 AWS CLI 返回的结果中提取特定的数据。
总结:
- 如果你想限制从 AWS 服务返回的数据量,使用
--filters
。 - 如果你想从已返回的数据中提取特定的信息,使用
--query
。 - 在某些情况下,两者可以结合使用。例如,你可以首先使用
--filters
在服务器端过滤数据,然后使用--query
在客户端进一步提取所需的信息。
最后,值得注意的是,--query
参数使用的是 JMESPath 语言,这是一个用于查询 JSON 文档的语言。而 --filters
的语法则取决于你正在使用的特定 AWS 服务和操作。