You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现AWS S3两存储桶间同名文件旧版本自动迁移功能?

AWS S3双桶旧版本自动迁移实现流程

前置准备

  • 提前创建两个S3存储桶,记为源桶(仅保留最新版本文件)和归档桶(存储历史旧版本文件),两个桶必须开启版本控制,这是获取历史版本对象的核心前提
  • 提前创建Lambda服务的专属IAM角色,权限至少包含:源桶的s3:GetObject、s3:ListBucketVersions、s3:DeleteObjectVersion,归档桶的s3:PutObject,以及Lambda基础运行权限

核心实现步骤

1. 配置源桶事件通知

  • 进入源桶的「属性」页面,找到「事件通知」模块,点击「创建事件通知」
  • 事件类型勾选所有对象创建事件(即s3:ObjectCreated:*),如果需要过滤特定前缀/后缀的文件可以自行配置,否则留空即可
  • 通知目标选择「Lambda函数」,可以直接选择已创建的Lambda函数,也可以先创建占位后续再关联

2. 编写Lambda处理逻辑

运行环境推荐选择Python 3.x,核心逻辑示例代码如下:

import boto3
s3 = boto3.client('s3')
# 替换为你自己的归档桶名称
ARCHIVE_BUCKET = 'your-archive-bucket-name'

def lambda_handler(event, context):
    # 解析触发事件的对象信息
    record = event['Records'][0]
    source_bucket = record['s3']['bucket']['name']
    object_key = record['s3']['object']['key']
    
    # 拉取当前对象的所有版本,默认按上传时间倒序排列
    versions = s3.list_object_versions(Bucket=source_bucket, Prefix=object_key)['Versions']
    # 只有1个版本说明是首次上传,没有旧版本需要迁移
    if len(versions) <= 1:
        return
    
    # 遍历除最新版本外的所有历史版本
    for old_version in versions[1:]:
        version_id = old_version['VersionId']
        # 将旧版本复制到归档桶
        s3.copy_object(
            Bucket=ARCHIVE_BUCKET,
            Key=object_key,
            CopySource={
                'Bucket': source_bucket,
                'Key': object_key,
                'VersionId': version_id
            }
            # 如需归档到冷存储可新增参数:StorageClass='GLACIER'
            # 如需给旧版本打标签可新增参数:Tagging='source=old_version_archive'
        )
        # 复制成功后删除源桶内的旧版本
        s3.delete_object(
            Bucket=source_bucket,
            Key=object_key,
            VersionId=version_id
        )
  • 给Lambda绑定提前准备好的IAM角色,根据你存储的最大文件大小调整Lambda的超时时间和内存配置,避免大文件迁移过程中超时中断

3. 存量数据处理(可选)

如果源桶上线该流程前已有历史旧版本,可以使用S3批量操作功能一次性完成存量旧版本的迁移,不用等待后续触发事件处理

测试验证

  • 往源桶上传一个测试文件,再上传同名的新版本文件
  • 检查源桶的版本列表,确认仅保留最新版本;再检查归档桶,确认已存入旧版本文件即可

注意事项

  • 千万不要关闭两个桶的版本控制,否则历史版本对象会丢失,迁移逻辑也无法正常运行
  • 生产环境建议添加Lambda错误告警,一旦出现迁移失败可以及时收到通知处理
  • 超过5GB的大文件建议使用S3分段复制能力,避免单请求超时

内容的提问来源于stack exchange,提问作者harshith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:39:02