日常资源管理必备的 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 ls、aws ec2 describe-instances 和 aws iam list-users。只有在确认了账户、区域、配置文件和目标资源 ID 后,才添加写入操作,如 sync、stop-instances 和 terminate-instances。