日常资源管理必备的 10 个 AWS CLI 命令

将此 AWS CLI 速查表放在手边,用于日常的 S3、EC2 和 IAM 检查、传输、实例操作和权限审查。

日常资源管理的十大必备 AWS CLI 命令

AWS CLI 通常是回答日常运维问题的最快方式:哪些 EC2 实例正在运行、S3 前缀中发生了什么变化、或者哪些策略附加到了用户。控制台很有用,但 CLI 提供了可重复的命令,你可以将其粘贴到运行手册或脚本中。

本 AWS CLI 速查表侧重于日常检查和故障排除中可能用到的实用 S3、EC2 和 IAM 命令。

前提条件

在开始之前,请确保你的系统已安装并配置了 AWS CLI。如果没有,请按照官方 AWS 文档进行安装并配置你的凭证(访问密钥 ID、秘密访问密钥和默认区域)。

# 检查 AWS CLI 版本
aws --version

# 如果尚未配置 AWS CLI,请进行配置
aws configure

Amazon S3 的必备 AWS CLI 命令

使用这些命令来检查存储桶、移动对象以及在传输前预览更改。

1. aws s3 ls - 列出 S3 存储桶和对象

此命令允许你列出 S3 存储桶或特定存储桶中的对象。这通常是了解存储状况的第一步。

目的: 查看 S3 存储桶或存储桶内容。

示例:

# 列出账户中的所有 S3 存储桶
aws s3 ls

# 列出特定存储桶中的对象
aws s3 ls s3://your-bucket-name/

# 递归列出对象,显示人类可读的大小和日期
aws s3 ls s3://your-bucket-name/ --recursive --human-readable --summarize

提示:

  • 使用 --recursive 列出前缀下的所有对象。S3 有前缀,而不是真正的文件夹,尽管 CLI 以类似文件夹的方式呈现它们。--summarize 提供总数和总大小。
  • 你也可以指定存储桶内的路径:aws s3 ls s3://your-bucket-name/prefix/

2. aws s3 cp - 复制文件到 S3 或从 S3 复制文件

cp 命令是本地文件系统与 S3 之间或 S3 存储桶之间传输文件的基本命令。

目的: 将本地文件复制到 S3、将 S3 对象复制到本地,或在 S3 存储桶之间复制对象。

示例:

# 将本地文件复制到 S3 存储桶
aws s3 cp local-file.txt s3://your-bucket-name/folder/remote-file.txt

# 将 S3 对象复制到本地计算机
aws s3 cp s3://your-bucket-name/folder/remote-file.txt local-copy.txt

# 将一个 S3 存储桶中的对象复制到另一个存储桶
aws s3 cp s3://source-bucket/file.txt s3://destination-bucket/new-file.txt

# 递归地将本地目录复制到 S3
aws s3 cp --recursive local-folder/ s3://your-bucket-name/remote-folder/

提示:

  • 复制整个目录时,--recursive 至关重要。
  • 使用 --exclude--include 在递归复制期间过滤文件。

3. aws s3 sync - 将本地目录与 S3 同步

sync 是一个强大的命令,可以将目录内容与 S3 前缀同步,反之亦然。它只复制新的或修改过的文件,因此对于备份和部署非常高效。

目的: 高效地将本地目录与 S3 存储桶/前缀同步。

示例:

# 将本地目录与 S3 存储桶同步
aws s3 sync local-directory/ s3://your-bucket-name/remote-path/

# 将 S3 存储桶与本地目录同步
aws s3 sync s3://your-bucket-name/remote-path/ local-directory/

# 试运行以查看将进行的更改,而不实际执行
aws s3 sync local-directory/ s3://your-bucket-name/remote-path/ --dryrun

最佳实践: 在执行 sync 操作之前,始终先使用 --dryrun 预览更改,尤其是对于关键数据。

4. aws s3 rm - 删除 S3 对象和存储桶

此命令用于删除 S3 存储桶中的对象或删除空存储桶。

目的: 从 S3 删除对象或空存储桶。

示例:

# 从存储桶中删除单个对象
aws s3 rm s3://your-bucket-name/path/to/object.txt

# 递归删除文件夹(前缀)中的所有对象
aws s3 rm s3://your-bucket-name/folder/ --recursive

# 删除空存储桶
aws s3 rb s3://your-bucket-name/

# 强制删除存储桶及其所有内容(请极其谨慎使用!)
aws s3 rb s3://your-bucket-name/ --force

警告: aws s3 rb --force 具有破坏性。它会在删除存储桶之前删除对象,但版本控制的存储桶可能仍需要使用较低级别的 S3 API 命令清理版本后才能删除。

Amazon EC2(弹性计算云)的必备 AWS CLI 命令

EC2 在 AWS 云中提供可扩展的计算能力。这些命令帮助你管理虚拟服务器。

5. aws ec2 describe-instances - 获取 EC2 实例详细信息

这是你收集 EC2 实例信息(包括状态、公有/私有 IP、标签等)的首选命令。

目的: 检索一个或多个 EC2 实例的详细信息。

示例:

# 描述当前区域中的所有 EC2 实例
aws ec2 describe-instances

# 描述具有特定标签的实例(例如 Environment=Production)
aws ec2 describe-instances \
    --filters "Name=tag:Environment,Values=Production"

# 按实例 ID 描述实例
aws ec2 describe-instances --instance-ids i-0abcdef1234567890

# 描述实例并使用 JMESPath 过滤特定信息(例如 PublicIpAddress)
aws ec2 describe-instances \
    --query "Reservations[*].Instances[*].{InstanceId:InstanceId,PublicIp:PublicIpAddress,State:State.Name}" \
    --output table

提示:

  • --filters 对于根据实例状态、标签、实例类型等缩小结果范围非常有用。
  • --query 允许你提取特定数据字段并重新格式化输出(例如使用 JMESPath 表达式)。

6. aws ec2 start-instances - 启动已停止的 EC2 实例

使用此命令启动一个或多个已停止的 EC2 实例。实例通常保留其私有 IPv4 地址,但公有 IPv4 地址可能会更改,除非你使用弹性 IP 地址。

目的: 启动已停止的 EC2 实例的启动过程。

示例:

# 启动单个 EC2 实例
aws ec2 start-instances --instance-ids i-0abcdef1234567890

# 启动多个 EC2 实例
aws ec2 start-instances --instance-ids i-0abcdef1234567890 i-0fedcba9876543210

7. aws ec2 stop-instances - 停止正在运行的 EC2 实例

此命令停止正在运行的 EC2 实例。对于大多数基于 EBS 的实例,实例停止后,按实例小时计费将停止,但附加的 EBS 卷、弹性 IP 地址、快照和一些相关资源仍可能产生费用。

目的: 停止正在运行的 EC2 实例。

示例:

# 停止单个 EC2 实例
aws ec2 stop-instances --instance-ids i-0abcdef1234567890

# 停止多个 EC2 实例
aws ec2 stop-instances --instance-ids i-0abcdef1234567890 i-0fedcba9876543210

# 强制停止实例(在生产系统中谨慎使用)
aws ec2 stop-instances --instance-ids i-0abcdef1234567890 --force

警告: 如果应用程序未正常关闭,强制停止实例可能导致数据丢失或文件系统损坏。

8. aws ec2 terminate-instances - 终止 EC2 实例

终止实例将永久删除该实例。仅当附加的 EBS 卷启用了 DeleteOnTermination 设置时,它们才会被删除。

目的: 永久删除 EC2 实例。

示例:

# 终止单个 EC2 实例
aws ec2 terminate-instances --instance-ids i-0abcdef1234567890

# 终止多个 EC2 实例
aws ec2 terminate-instances --instance-ids i-0abcdef1234567890 i-0fedcba9876543210

警告: 终止是永久且不可逆的操作。在终止实例之前,请确保已备份关键数据或创建了快照。

IAM(身份和访问管理)的必备 AWS CLI 命令

IAM 允许你安全地控制对 AWS 服务和资源的访问。这些命令有助于管理用户及其权限。

9. aws iam list-users - 列出 IAM 用户

此命令列出 AWS 账户中的所有 IAM 用户,以及他们的 ARN、创建日期和用户 ID。

目的: 查看 AWS 账户中配置的所有 IAM 用户。

示例:

# 列出所有 IAM 用户
aws iam list-users

# 列出用户并使用 JMESPath 提取特定字段
aws iam list-users --query "Users[*].{UserName:UserName,CreateDate:CreateDate,Arn:Arn}" --output table

最佳实践: 定期审查你的 IAM 用户列表,确保只存在必要的用户,并删除旧的、未使用的账户。

10. aws iam list-attached-user-policies - 列出附加到 IAM 用户的策略

了解 IAM 用户拥有哪些权限对于安全性和排查访问问题至关重要。此命令列出直接附加到特定用户的托管策略。

目的: 显示附加到 IAM 用户的托管策略。

示例:

# 列出附加到特定 IAM 用户的所有托管策略
aws iam list-attached-user-policies --user-name YourIAMUserName

# 列出附加到特定 IAM 用户的内联策略
aws iam list-user-policies --user-name YourIAMUserName

提示:

  • 请记住,IAM 用户可以从附加的托管策略、内联策略和组成员身份获得权限。角色是独立的 IAM 身份;除非允许用户承担角色,否则用户不会继承角色权限。
  • 要获取特定策略的详细信息,请使用 aws iam get-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess,然后使用 aws iam get-policy-version

要点

从只读命令开始,例如 aws s3 lsaws ec2 describe-instancesaws iam list-users。只有在确认了账户、区域、配置文件和目标资源 ID 后,才添加写入操作,如 syncstop-instancesterminate-instances