AWS S3 CLI 使用教程:全面解析命令行工具
AWS S3 CLI 使用教程:全面解析命令行工具
Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,具有行业领先的可扩展性、数据可用性、安全性和性能。这意味着各种规模和行业的客户都可以使用 S3 来存储和保护任意数量的数据,用于各种用例,如网站、移动应用程序、备份和还原、存档、企业应用程序、IoT 设备和大数据分析。
虽然 AWS 管理控制台提供了图形化界面来管理 S3,但对于自动化任务、批量操作以及与脚本集成,AWS 命令行界面 (CLI) 提供了更强大、更灵活的方式。本文将深入探讨 AWS S3 CLI 的使用,从安装配置到高级命令,帮助您全面掌握这一强大的工具。
1. 安装与配置 AWS CLI
在使用 S3 CLI 之前,您需要先安装并配置 AWS CLI。
1.1 安装 AWS CLI
AWS CLI 支持多种操作系统,包括 Windows、macOS 和 Linux。
Windows:
- 下载适用于 Windows 的 AWS CLI 安装程序:https://aws.amazon.com/cli/
- 运行安装程序并按照提示进行操作。
- 验证安装:打开命令提示符并输入
aws --version
。如果显示版本信息,则表示安装成功。
macOS:
- 使用 Homebrew 安装(推荐):
bash
brew update
brew install awscli - 验证安装:打开终端并输入
aws --version
。
Linux:
- 使用包管理器安装(例如,对于 Debian/Ubuntu):
bash
sudo apt-get update
sudo apt-get install awscli - 或使用 pip 安装(适用于所有发行版):
bash
pip install awscli --upgrade --user
确保将~/.local/bin
添加到您的 PATH 环境变量中(如果尚未添加)。 - 验证安装:打开终端并输入
aws --version
。
1.2 配置 AWS CLI
安装完成后,您需要配置 AWS CLI 以便它可以访问您的 AWS 资源。配置过程涉及设置访问密钥 ID、秘密访问密钥、默认区域和输出格式。
-
获取访问密钥:
- 登录 AWS 管理控制台。
- 导航到 IAM (Identity and Access Management) 服务。
- 创建或选择一个具有 S3 访问权限的用户。
- 在用户的安全凭证选项卡中,创建访问密钥。请务必下载并安全地存储您的访问密钥 ID 和秘密访问密钥。
-
运行
aws configure
命令:
bash
aws configure -
输入配置信息:
- AWS Access Key ID: 输入您的访问密钥 ID。
- AWS Secret Access Key: 输入您的秘密访问密钥。
- Default region name: 输入您希望使用的默认 AWS 区域(例如,
us-east-1
)。 - Default output format: 输入您希望的默认输出格式(例如,
json
、text
或table
)。
配置完成后,AWS CLI 将使用这些凭证来代表您进行身份验证和授权。
多配置文件(可选):
如果您需要管理多个 AWS 账户或使用不同的 IAM 角色,可以使用命名配置文件。
bash
aws configure --profile my-profile
然后,在运行命令时,可以使用 --profile my-profile
选项来指定使用哪个配置文件。
2. S3 CLI 基础命令
S3 CLI 提供了两组命令:
- 高级命令 (s3): 这些命令提供了更高级别的抽象,简化了常见任务,例如上传、下载和同步整个目录。
- 低级命令 (s3api): 这些命令直接映射到 S3 REST API,提供了对 S3 操作的更精细控制。
本节将重点介绍高级命令 (s3)。
2.1 列出存储桶和对象
-
列出所有存储桶:
bash
aws s3 ls -
列出特定存储桶中的对象:
bash
aws s3 ls s3://your-bucket-name/your-bucket-name
替换为您的存储桶名称。
-
列出特定前缀下的对象:
bash
aws s3 ls s3://your-bucket-name/prefix/prefix
是您想要列出对象的前缀(类似于文件夹路径)。
-
递归列出所有对象(包括子目录):
bash
aws s3 ls s3://your-bucket-name/ --recursive
2.2 上传文件和目录
-
上传单个文件:
bash
aws s3 cp local-file.txt s3://your-bucket-name/remote-file.txtlocal-file.txt
是您要上传的本地文件路径。remote-file.txt
是文件在 S3 中的名称。
-
上传整个目录(递归):
bash
aws s3 cp local-directory/ s3://your-bucket-name/remote-directory/ --recursivelocal-directory/
是您要上传的本地目录路径。remote-directory/
是目录在 S3 中的路径。
-
使用通配符上传多个文件:
bash
aws s3 cp *.txt s3://your-bucket-name/- 这将上传当前目录中所有以
.txt
结尾的文件。
- 这将上传当前目录中所有以
2.3 下载文件和目录
-
下载单个文件:
bash
aws s3 cp s3://your-bucket-name/remote-file.txt local-file.txt -
下载整个目录(递归):
bash
aws s3 cp s3://your-bucket-name/remote-directory/ local-directory/ --recursive
2.4 同步文件和目录
s3 sync
命令可以同步本地目录和 S3 存储桶之间的文件。它只会上传或下载已更改的文件,从而节省时间和带宽。
-
将本地目录同步到 S3 存储桶:
bash
aws s3 sync local-directory/ s3://your-bucket-name/remote-directory/ -
将 S3 存储桶同步到本地目录:
bash
aws s3 sync s3://your-bucket-name/remote-directory/ local-directory/ -
使用
--delete
选项删除目标中不存在的文件:
bash
aws s3 sync local-directory/ s3://your-bucket-name/remote-directory/ --delete- 这将删除 S3 存储桶中存在但本地目录中不存在的文件。
2.5 删除文件和存储桶
-
删除单个文件:
bash
aws s3 rm s3://your-bucket-name/remote-file.txt -
删除整个目录(递归):
bash
aws s3 rm s3://your-bucket-name/remote-directory/ --recursive -
删除空存储桶:
bash
aws s3 rb s3://your-bucket-name -
强制删除非空存储桶(危险!):
bash
aws s3 rb s3://your-bucket-name --force- 这将删除存储桶及其中的所有对象。请谨慎使用!
2.6 创建存储桶
- 创建存储桶:
bash
aws s3 mb s3://your-bucket-name- 存储桶名称必须全局唯一。
3. S3 CLI 高级用法
3.1 管理存储桶策略
存储桶策略是基于 JSON 的访问控制策略,用于控制对存储桶及其对象的访问。
-
获取存储桶策略:
bash
aws s3api get-bucket-policy --bucket your-bucket-name -
设置存储桶策略(从文件):
bash
aws s3api put-bucket-policy --bucket your-bucket-name --policy file://policy.jsonpolicy.json
是包含策略 JSON 的文件。
-
删除存储桶策略:
bash
aws s3api delete-bucket-policy --bucket your-bucket-name
3.2 管理对象 ACL(访问控制列表)
ACL 允许您控制对单个对象的访问。
-
获取对象 ACL:
bash
aws s3api get-object-acl --bucket your-bucket-name --key object-keyobject-key
是对象的键(路径)。
-
设置对象 ACL(例如,授予公共读取权限):
bash
aws s3api put-object-acl --bucket your-bucket-name --key object-key --acl public-read- 其他 ACL 选项包括
private
、authenticated-read
等。
- 其他 ACL 选项包括
3.3 使用服务器端加密 (SSE)
S3 支持服务器端加密,可以在数据存储到 S3 之前自动加密数据。
-
使用 SSE-S3 上传文件:
bash
aws s3 cp local-file.txt s3://your-bucket-name/remote-file.txt --sse AES256AES256
是 S3 管理的密钥的加密算法。
-
使用 SSE-KMS 上传文件:
bash
aws s3 cp local-file.txt s3://your-bucket-name/remote-file.txt --sse aws:kms --sse-kms-key-id your-kms-key-idyour-kms-key-id
是您的 AWS KMS 密钥 ID。
-
使用 SSE-C 上传文件(客户提供的密钥):
- 这需要使用
s3api
命令并提供加密密钥。
- 这需要使用
3.4 使用预签名 URL
预签名 URL 允许您生成一个临时 URL,其他人可以使用该 URL 访问您的 S3 对象,而无需 AWS 凭证。
-
生成预签名 URL(默认过期时间为 1 小时):
bash
aws s3 presign s3://your-bucket-name/object-key -
指定过期时间(例如,10 分钟):
bash
aws s3 presign s3://your-bucket-name/object-key --expires-in 600--expires-in
的值以秒为单位。
3.5 管理存储类别
S3 提供了多种存储类别,以满足不同的性能和成本需求。
- 上传文件并指定存储类别:
bash
aws s3 cp local-file.txt s3://your-bucket-name/remote-file.txt --storage-class STANDARD_IA- 其他存储类别包括
INTELLIGENT_TIERING
、GLACIER
、DEEP_ARCHIVE
等。
- 其他存储类别包括
3.6 其他高级选项
-
--include
和--exclude
选项: 用于在cp
、sync
和rm
命令中过滤文件。bash
aws s3 sync local-directory/ s3://your-bucket-name/ --exclude "*.tmp" --include "*.log"
* 这将同步除.tmp
文件外的所有文件,但仅包括.log
文件。 -
--dryrun
选项: 用于模拟命令执行,而不实际进行任何更改。 -
--quiet
选项: 用于抑制输出,仅显示错误消息。 -
--debug
选项: 用于显示详细的调试信息,帮助排查问题。
4. 脚本和自动化
AWS S3 CLI 的强大之处在于它可以轻松集成到脚本和自动化任务中。以下是一些示例:
4.1 备份脚本
```bash
!/bin/bash
备份目录
BACKUP_DIR="/path/to/your/data"
S3 存储桶
BUCKET_NAME="your-backup-bucket"
备份文件名(使用日期作为前缀)
DATE=$(date +%Y-%m-%d)
BACKUP_FILE="$DATE-backup.tar.gz"
创建压缩包
tar -czvf "$BACKUP_FILE" "$BACKUP_DIR"
上传到 S3
aws s3 cp "$BACKUP_FILE" "s3://$BUCKET_NAME/$BACKUP_FILE"
删除本地备份文件
rm "$BACKUP_FILE"
echo "Backup completed successfully!"
```
4.2 自动同步网站
```bash
!/bin/bash
网站目录
WEBSITE_DIR="/path/to/your/website"
S3 存储桶
BUCKET_NAME="your-website-bucket"
同步网站到 S3
aws s3 sync "$WEBSITE_DIR" "s3://$BUCKET_NAME" --delete
echo "Website synced successfully!"
```
这些只是简单的示例,您可以根据自己的需求创建更复杂的脚本。
5. 故障排除
在使用 S3 CLI 时,您可能会遇到一些问题。以下是一些常见的故障排除技巧:
- 检查您的凭证: 确保您的访问密钥 ID 和秘密访问密钥正确,并且您的 IAM 用户具有所需的 S3 权限。
- 检查您的区域: 确保您指定的区域与您的存储桶所在的区域匹配。
- 检查您的网络连接: 确保您的计算机可以访问 Internet 并且没有防火墙阻止对 S3 的访问。
- 查看错误消息: S3 CLI 通常会提供详细的错误消息,帮助您诊断问题。
- 使用
--debug
选项: 这将显示详细的调试信息,可以帮助您找到问题的根源。 - 查阅 AWS 文档: AWS 文档提供了有关 S3 CLI 的详细信息和故障排除指南。
6. 展望未来:S3 CLI 的持续演进
AWS S3 CLI 不断发展,以适应不断变化的云计算环境和用户需求。AWS 团队定期发布更新,添加新功能、改进性能并增强安全性。以下是一些值得关注的未来发展趋势:
- 更紧密的集成: 预计 S3 CLI 将与其他 AWS 服务(如 Lambda、CloudFormation 和 Step Functions)进行更紧密的集成,从而实现更复杂的自动化工作流程。
- 增强的性能: AWS 可能会继续优化 S3 CLI 的性能,特别是在处理大量数据和高并发请求时。
- 更智能的默认设置: 可能会引入更智能的默认设置,例如自动选择最佳的存储类别或加密选项,以简化常见任务。
- 改进的错误处理和报告: 可能会改进错误处理和报告机制,以便用户更容易诊断和解决问题。
- 对新 S3 功能的支持: 随着 S3 不断推出新功能,S3 CLI 也会及时更新以支持这些功能。
保持对 AWS S3 CLI 更新的关注,并定期查阅 AWS 官方博客和文档,可以帮助您充分利用这一工具的最新功能和最佳实践。您可以订阅 AWS 相关的技术博客、邮件列表,或者关注 AWS 的社交媒体账号,以获取最新的更新信息。同时,积极参与 AWS 社区论坛和讨论,与其他用户交流经验和技巧,也是一个很好的学习途径。