AWS CLI的隐藏玩法


AWS CLI 是一个强大的工具,通过命令行可以管理 AWS 服务。除了基础的命令和操作,还有一些”花式玩法”可以让你更高效地使用 AWS CLI。以下是一些建议:

  1. 查询 (Query)

    使用 --query 参数可以过滤输出结果。这是一个非常有用的功能,尤其当返回的信息很多时。例如,列出所有 EC2 实例的 ID:

    aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId]'
  2. 输出格式

    AWS CLI 支持多种输出格式,如 json, text, table。你可以使用 --output 参数更改输出格式,例如:

    aws ec2 describe-instances --output table
  3. 配置自动补全

    AWS CLI 支持命令补全,这可以大大提高你的工作效率。你可以在 bash 或 zsh 中配置自动补全功能。

  4. 使用配置文件

    除了默认的配置文件,你可以使用 --profile 参数切换到其他的 AWS 配置文件,这在管理多个 AWS 账号时非常有用。

    aws s3 ls --profile my-other-account
  5. 使用 S3 通配符

    当使用 aws s3 cpaws s3 sync 时,可以使用通配符来匹配多个文件或目录。

    aws s3 cp s3://my-bucket/path/to/files/ . --recursive --exclude "*" --include "*.jpg"
  6. 使用 wait 命令

    wait 命令可以让 CLI 等待某个 AWS 资源变为特定的状态。例如,等待一个 EC2 实例变为运行状态:

    aws ec2 wait instance-running --instance-ids i-1234567890abcdef0
  7. 生成 CLI 骨架

    如果你不确定如何格式化一个特定命令的输入,可以使用 --generate-cli-skeleton 参数来生成一个输入的骨架。例如:

    aws dynamodb put-item --generate-cli-skeleton
  8. 使用 --dry-run

    如果你想测试命令是否正确,但不想实际执行它,可以使用 --dry-run 参数。这将验证命令,但不会更改任何资源。

  9. 批量操作

    使用 xargs 可以与 AWS CLI 配合执行批量操作。例如,批量停止所有运行的 EC2 实例:

    aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text | xargs -I {} aws ec2 stop-instances --instance-ids {}
  10. 将输出转为 CSV

结合其他命令行工具,例如 jq,可以将输出转化为 CSV 格式。例如,列出所有的 EC2 实例并将其转化为 CSV:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, InstanceType, State.Name]' --output json | jq -r '.[] | @csv'
  1. 使用 --filters 过滤资源

大部分的 describe 命令支持 --filters 参数,这使得你可以基于特定条件过滤资源。例如,列出所有运行中的 EC2 实例:

aws ec2 describe-instances --filters Name=instance-state-name,Values=running
  1. 将 AWS CLI 结合 Bash 脚本

将 AWS CLI 命令嵌入到 Bash 脚本中,可以自动化复杂的工作流程。例如,定期备份 RDS 快照并删除旧的快照。

  1. 使用 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
  1. 流式处理 S3 对象

使用 s3api 命令,你可以流式处理 S3 对象,这在处理大文件时非常有用。

aws s3api get-object --bucket my-bucket --key large-file.txt - | head
  1. 使用 sts assume-role 切换角色

如果你需要在多个 AWS 账号之间切换或在 AWS Organizations 的不同组织单位之间切换,你可以使用 sts assume-role。这使得跨账号操作更为简便。

  1. 记录所有 CLI 操作

使用 --debug 参数可以输出更详细的信息,这对于调试和记录 AWS CLI 操作非常有用。

--filters--query 都是 AWS CLI 的参数,用于从 AWS 服务获取信息时过滤和提取数据。但它们在目的、用法和执行时间上都有所不同。

  1. –filters

    • 目的: 用于过滤 AWS 服务返回的数据。--filters 参数直接与 AWS 服务进行交互,只返回满足特定条件的数据。
    • 执行时间: --filters 的过滤操作在服务器端执行。也就是说,AWS 服务会在返回数据之前应用这些过滤器。
    • 用法示例: 列出所有运行中的 EC2 实例:
      aws ec2 describe-instances --filters Name=instance-state-name,Values=running
  2. –query

    • 目的: 用于从 AWS CLI 返回的结果中提取特定的数据。--query 参数在本地处理 CLI 返回的结果。
    • 执行时间: --query 的操作在客户端执行。也就是说,AWS CLI 首先从 AWS 服务获取完整的数据,然后在本地应用 --query 参数来提取所需的信息。
    • 用法示例: 从返回的 EC2 描述中提取所有实例的 ID:
      aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId'

总结:

  • 如果你想限制从 AWS 服务返回的数据量,使用 --filters
  • 如果你想从已返回的数据中提取特定的信息,使用 --query
  • 在某些情况下,两者可以结合使用。例如,你可以首先使用 --filters 在服务器端过滤数据,然后使用 --query 在客户端进一步提取所需的信息。

最后,值得注意的是,--query 参数使用的是 JMESPath 语言,这是一个用于查询 JSON 文档的语言。而 --filters 的语法则取决于你正在使用的特定 AWS 服务和操作。


文章作者: AWS Learner
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AWS Learner !
评论
  目录