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

如何批量下载S3对象的所有版本?含CLI与Lambda方案问询

批量处理S3文件所有版本的两种方案

一、使用AWS CLI批量下载所有版本

步骤1:列出文件的所有版本

执行以下命令获取目标文件的所有版本信息(替换your-bucket-name和your-file-key为实际值):

aws s3api list-object-versions --bucket your-bucket-name --prefix your-file-key

步骤2:生成批量下载脚本

借助jq工具提取版本ID并生成下载命令(需提前安装jq):

aws s3api list-object-versions --bucket your-bucket-name --prefix your-file-key | jq -r '.Versions[] | "aws s3api get-object --bucket your-bucket-name --key \(.Key) --version-id \(.VersionId) \"\(.Key).\(.VersionId)\""' > download-versions.sh

步骤3:执行下载脚本

赋予脚本执行权限并运行,每个版本会以「原文件名+版本ID」命名,避免文件覆盖:

chmod +x download-versions.sh && ./download-versions.sh

二、使用Lambda函数跨桶复制所有版本

如果需要将所有版本同步到另一个S3桶,可通过Python编写Lambda函数实现:

1. 配置Lambda权限

确保Lambda执行角色拥有以下权限:

  • 原S3桶:s3:GetObjectVersions、s3:GetObject
  • 目标S3桶:s3:PutObject

2. Lambda代码示例

import boto3

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    # 替换为实际桶名和文件路径
    source_bucket = "your-source-bucket"
    target_bucket = "your-target-bucket"
    target_file_key = "your-file-key"

    # 获取文件的所有版本
    version_response = s3_client.list_object_versions(
        Bucket=source_bucket,
        Prefix=target_file_key
    )

    # 遍历并复制每个版本到目标桶
    if "Versions" in version_response:
        for version in version_response["Versions"]:
            version_id = version["VersionId"]
            # 目标键添加版本ID后缀,避免冲突
            dest_key = f"{target_file_key}.{version_id}"
            
            s3_client.copy_object(
                Bucket=target_bucket,
                Key=dest_key,
                CopySource={
                    "Bucket": source_bucket,
                    "Key": target_file_key,
                    "VersionId": version_id
                }
            )

    # 可选:处理删除标记(如需保留可添加复制逻辑)
    if "DeleteMarkers" in version_response:
        for marker in version_response["DeleteMarkers"]:
            print(f"Skipped delete marker with version ID: {marker['VersionId']}")

    return {"statusCode": 200, "body": "All versions copied successfully"}

3. 注意事项

  • 调整Lambda超时时间:默认3秒不足以处理60个版本,建议设置为5分钟
  • 目标键命名可根据需求自定义,比如保留原目录结构
  • 若文件版本数量极大,需考虑分页处理list_object_versions的返回结果(60个版本无需分页)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:20:33