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高级特性后,接下来可以:

  1. EBS块存储 - 学习块存储服务
  2. CloudFront CDN - 配合CDN使用
  3. 无服务器应用实战 - S3触发Lambda实战
最后更新:2026-03-28