AWS CLI 是一个强大的工具,通过命令行可以管理 AWS 服务。除了基础的命令和操作,还有一些”花式玩法”可以让你更高效地使用 AWS CLI。以下是一些建议:
查询 (Query)
使用
--query参数可以过滤输出结果。这是一个非常有用的功能,尤其当返回的信息很多时。例如,列出所有 EC2 实例的 ID:bashaws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]'输出格式
AWS CLI 支持多种输出格式,如
json,text,table。你可以使用--output参数更改输出格式,例如:bashaws ec2 describe-instances --output table配置自动补全
AWS CLI 支持命令补全,这可以大大提高你的工作效率。你可以在 bash 或 zsh 中配置自动补全功能。
使用配置文件
除了默认的配置文件,你可以使用
--profile参数切换到其他的 AWS 配置文件,这在管理多个 AWS 账号时非常有用。bashaws s3 ls --profile my-other-account使用 S3 通配符
当使用
aws s3 cp或aws s3 sync时,可以使用通配符来匹配多个文件或目录。bashaws s3 cp s3://my-bucket/path/to/files/ . --recursive --exclude "*" --include "*.jpg"使用
wait命令wait命令可以让 CLI 等待某个 AWS 资源变为特定的状态。例如,等待一个 EC2 实例变为运行状态:bashaws ec2 wait instance-running --instance-ids i-1234567890abcdef0生成 CLI 骨架
如果你不确定如何格式化一个特定命令的输入,可以使用
--generate-cli-skeleton参数来生成一个输入的骨架。例如:bashaws dynamodb put-item --generate-cli-skeleton使用
--dry-run如果你想测试命令是否正确,但不想实际执行它,可以使用
--dry-run参数。这将验证命令,但不会更改任何资源。批量操作
使用
xargs可以与 AWS CLI 配合执行批量操作。例如,批量停止所有运行的 EC2 实例:bashaws 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 实例:bash
aws ec2 describe-instances --filters Name=instance-state-name,Values=running
- 目的: 用于过滤 AWS 服务返回的数据。
–query:
- 目的: 用于从 AWS CLI 返回的结果中提取特定的数据。
--query参数在本地处理 CLI 返回的结果。 - 执行时间:
--query的操作在客户端执行。也就是说,AWS CLI 首先从 AWS 服务获取完整的数据,然后在本地应用--query参数来提取所需的信息。 - 用法示例: 从返回的 EC2 描述中提取所有实例的 ID:bash
aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId'
- 目的: 用于从 AWS CLI 返回的结果中提取特定的数据。
总结:
- 如果你想限制从 AWS 服务返回的数据量,使用
--filters。 - 如果你想从已返回的数据中提取特定的信息,使用
--query。 - 在某些情况下,两者可以结合使用。例如,你可以首先使用
--filters在服务器端过滤数据,然后使用--query在客户端进一步提取所需的信息。
最后,值得注意的是,--query 参数使用的是 JMESPath 语言,这是一个用于查询 JSON 文档的语言。而 --filters 的语法则取决于你正在使用的特定 AWS 服务和操作。