S3高级特性 #
一、版本控制 #
1.1 版本控制概述 #
text
版本控制特点:
├── 保留对象的多个版本
├── 防止意外删除和覆盖
├── 可恢复到任意版本
├── 一旦启用无法完全禁用
└── 增加存储成本
1.2 启用版本控制 #
bash
aws s3api put-bucket-versioning \
--bucket my-bucket \
--versioning-configuration Status=Enabled
1.3 版本控制工作原理 #
text
版本控制行为:
├── 上传对象
│ └── 创建新版本,生成版本ID
│
├── 覆盖对象
│ └── 创建新版本,保留旧版本
│
├── 删除对象
│ ├── 添加删除标记
│ └── 旧版本仍保留
│
└── 永久删除
└── 指定版本ID删除
1.4 版本操作 #
bash
aws s3api list-object-versions --bucket my-bucket
aws s3api get-object \
--bucket my-bucket \
--key file.txt \
--version-id version-id \
output.txt
aws s3api delete-object \
--bucket my-bucket \
--key file.txt \
--version-id version-id
1.5 删除标记 #
text
删除标记特点:
├── 删除对象时创建
├── 使对象"消失"
├── 可通过删除删除标记恢复
└── 是一个特殊的对象版本
二、生命周期管理 #
2.1 生命周期概述 #
text
生命周期管理用途:
├── 自动转换存储类别
├── 自动过期删除对象
├── 清理不完整的多部分上传
├── 降低存储成本
└── 自动化管理
2.2 生命周期规则 #
json
{
"Rules": [
{
"ID": "MoveToIA",
"Status": "Enabled",
"Filter": {
"Prefix": "logs/"
},
"Transitions": [
{
"Days": 30,
"StorageClass": "STANDARD_IA"
},
{
"Days": 90,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 365
}
}
]
}
2.3 配置生命周期 #
bash
aws s3api put-bucket-lifecycle-configuration \
--bucket my-bucket \
--lifecycle-configuration file://lifecycle.json
2.4 生命周期规则示例 #
转换存储类别 #
json
{
"Rules": [
{
"ID": "TransitionToIA",
"Status": "Enabled",
"Filter": {},
"Transitions": [
{
"Days": 30,
"StorageClass": "INTELLIGENT_TIERING"
}
]
}
]
}
过期删除 #
json
{
"Rules": [
{
"ID": "ExpireOldLogs",
"Status": "Enabled",
"Filter": {
"Prefix": "logs/"
},
"Expiration": {
"Days": 90
}
}
]
}
清理多部分上传 #
json
{
"Rules": [
{
"ID": "AbortIncompleteUpload",
"Status": "Enabled",
"Filter": {},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}
删除过期删除标记 #
json
{
"Rules": [
{
"ID": "DeleteExpiredMarkers",
"Status": "Enabled",
"Filter": {},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 30
}
}
]
}
2.5 生命周期注意事项 #
text
注意事项:
├── 最小存储时间
│ ├── Standard-IA: 30天
│ ├── One Zone-IA: 30天
│ ├── Glacier: 90天
│ └── Deep Archive: 180天
│
├── 转换时间
│ └── 从对象创建开始计算
│
├── 规则冲突
│ └── 最具体的规则优先
│
└── 版本控制
└── 可分别设置当前版本和非当前版本
三、复制 #
3.1 复制概述 #
text
复制类型:
├── 跨区域复制(CRR)
│ └── 复制到不同区域的存储桶
│ └── 用于灾难恢复、降低延迟
│
└── 同区域复制(SRR)
└── 复制到同一区域的存储桶
└── 用于日志聚合、生产/测试环境同步
3.2 复制要求 #
text
复制前提条件:
├── 源和目标存储桶都启用版本控制
├── IAM角色有足够权限
├── 目标存储桶可以与源相同账户或不同账户
└── 源存储桶配置复制规则
3.3 配置复制 #
json
{
"Role": "arn:aws:iam::123456789012:role/s3-replication-role",
"Rules": [
{
"Status": "Enabled",
"Priority": 1,
"Filter": {},
"Destination": {
"Bucket": "arn:aws:s3:::destination-bucket",
"StorageClass": "STANDARD"
}
}
]
}
3.4 复制配置示例 #
bash
aws s3api put-bucket-replication \
--bucket source-bucket \
--replication-configuration file://replication.json
3.5 复制时间控制(S3 RTC) #
text
S3 RTC特点:
├── 在15分钟内复制99.99%的对象
├── 需要额外付费
├── 适合合规要求高的场景
└── 提供复制指标
四、事件通知 #
4.1 事件类型 #
text
S3事件类型:
├── 对象创建
│ ├── s3:ObjectCreated:Put
│ ├── s3:ObjectCreated:Post
│ ├── s3:ObjectCreated:Copy
│ └── s3:ObjectCreated:CompleteMultipartUpload
│
├── 对象删除
│ ├── s3:ObjectRemoved:Delete
│ └── s3:ObjectRemoved:DeleteMarkerCreated
│
├── 对象恢复
│ └── s3:ObjectRestore:Post
│
├── 复制事件
│ └── s3:ObjectReplication:*
│
└── 生命周期事件
└── s3:LifecycleExpiration:*
4.2 通知目标 #
text
事件通知目标:
├── SNS主题
│ └── 发送通知消息
│
├── SQS队列
│ └── 发送到消息队列
│
└── Lambda函数
└── 触发函数执行
4.3 配置事件通知 #
json
{
"LambdaFunctionConfigurations": [
{
"Id": "ImageProcessing",
"LambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:process-image",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {
"FilterRules": [
{
"Name": "prefix",
"Value": "images/"
},
{
"Name": "suffix",
"Value": ".jpg"
}
]
}
}
}
]
}
4.4 事件通知示例 #
bash
aws s3api put-bucket-notification-configuration \
--bucket my-bucket \
--notification-configuration file://notification.json
4.5 事件消息格式 #
json
{
"Records": [{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-1",
"eventTime": "2024-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"s3": {
"bucket": {
"name": "my-bucket",
"arn": "arn:aws:s3:::my-bucket"
},
"object": {
"key": "uploads/image.jpg",
"size": 1024,
"eTag": "d41d8cd98f00b204e9800998ecf8427e"
}
}
}]
}
五、S3 Select #
5.1 S3 Select概述 #
text
S3 Select特点:
├── 使用SQL查询对象内容
├── 只返回需要的数据
├── 减少数据传输量
├── 支持CSV、JSON、Parquet
└── 降低成本和延迟
5.2 使用S3 Select #
bash
aws s3api select-object-content \
--bucket my-bucket \
--key data.csv \
--expression "SELECT * FROM s3object s WHERE s.age > 25" \
--expression-type SQL \
--input-serialization '{"CSV": {"FileHeaderInfo": "USE"}}' \
--output-serialization '{"CSV": {}}' \
output.csv
5.3 Python示例 #
python
import boto3
s3 = boto3.client('s3')
response = s3.select_object_content(
Bucket='my-bucket',
Key='data.csv',
ExpressionType='SQL',
Expression="SELECT * FROM s3object s WHERE s.age > 25",
InputSerialization={'CSV': {'FileHeaderInfo': 'USE'}},
OutputSerialization={'CSV': {}}
)
for event in response['Payload']:
if 'Records' in event:
print(event['Records']['Payload'].decode('utf-8'))
六、S3对象锁定 #
6.1 对象锁定概述 #
text
对象锁定特点:
├── WORM(Write Once Read Many)存储
├── 符合SEC 17a-4等合规要求
├── 防止对象被删除或覆盖
├── 两种模式:
│ ├── 合规模式
│ └── 治理模式
└── 必须在创建存储桶时启用
6.2 锁定模式 #
| 模式 | 说明 |
|---|---|
| 合规模式 | 无法被任何用户删除或覆盖,包括root用户 |
| 治理模式 | 具有特殊权限的用户可以删除或覆盖 |
6.3 配置对象锁定 #
bash
aws s3api create-bucket \
--bucket locked-bucket \
--region us-east-1 \
--object-lock-enabled-for-bucket
七、S3访问点 #
7.1 访问点概述 #
text
访问点特点:
├── 简化数据访问管理
├── 每个访问点有独立的策略
├── 每个账户每区域最多10,000个
├── 支持VPC限制
└── 简化大规模数据共享
7.2 创建访问点 #
bash
aws s3control create-access-point \
--name my-access-point \
--account-id 123456789012 \
--bucket my-bucket
八、S3存储分析 #
8.1 S3 Storage Lens #
text
Storage Lens功能:
├── 存储使用情况分析
├── 成本优化建议
├── 安全最佳实践检查
├── 跨账户聚合视图
└── 仪表板和报告
8.2 存储类分析 #
text
存储类分析用途:
├── 分析访问模式
├── 决定何时转换存储类别
├── 优化生命周期策略
└── 降低存储成本
九、S3批量操作 #
9.1 批量操作概述 #
text
批量操作类型:
├── 复制对象
├── 加密对象
├── 修改ACL
├── 添加标签
├── 恢复对象
└── 调用Lambda函数
9.2 创建批量操作 #
bash
aws s3control create-job \
--account-id 123456789012 \
--operation '{"LambdaInvoke": {"FunctionArn": "arn:aws:lambda:..."}}' \
--manifest '{"Location": {"S3": {"BucketArn": "...", "Key": "manifest.csv"}}}' \
--report "{\"Bucket\":\"...\",\"Enabled\":true,\"Format\":\"ReportCSV_20180820\",\"Scope\":\"AllTasks\"}"
十、S3最佳实践 #
10.1 性能优化 #
text
性能建议:
├── 使用多部分上传
│ └── 大于100MB必须使用
│ └── 大于5GB必须使用
│
├── 使用S3 Transfer Acceleration
│ └── 加速远距离传输
│
├── 并行上传
│ └── 使用多个线程
│
├── 使用S3 Select
│ └── 减少数据传输
│
└── 合理的前缀设计
└── 提高并发性能
10.2 成本优化 #
text
成本优化建议:
├── 使用生命周期策略
├── 选择合适的存储类别
├── 启用Intelligent-Tiering
├── 压缩数据
├── 删除不需要的版本
└── 监控和分析存储使用
10.3 安全最佳实践 #
text
安全建议:
├── 启用版本控制
├── 启用对象锁定(合规要求)
├── 使用存储桶策略
├── 启用访问日志
├── 启用服务器访问日志
├── 使用Macie发现敏感数据
└── 定期审计权限
十一、小结 #
本章介绍了S3高级特性:
| 内容 | 要点 |
|---|---|
| 版本控制 | 保留多版本、防止误删 |
| 生命周期 | 自动转换存储类别、过期删除 |
| 复制 | 跨区域/同区域复制 |
| 事件通知 | 触发Lambda、SNS、SQS |
| S3 Select | SQL查询对象内容 |
下一步学习 #
了解S3高级特性后,接下来可以:
- EBS块存储 - 学习块存储服务
- CloudFront CDN - 配合CDN使用
- 无服务器应用实战 - S3触发Lambda实战
最后更新:2026-03-28