如何通过Python Boto3实现S3跨区域递归复制对象
boto3完全可以实现和你给出的AWS CLI命令等效的跨区域S3递归复制能力,不存在接口层面的跨区域限制。你之前测试的同区域限制问题,本质是配置方式错误,不是接口本身不支持跨区域场景。
核心实现逻辑
你用的aws s3 cp --recursive跨区域复制,底层做了两件事:
- 连接源区域S3端点,递归列出源桶路径下的所有对象
- 连接目标区域S3端点,逐个发起对象复制请求,请求中明确携带源桶的位置信息
用boto3可以完全复现这套逻辑,核心要避开两个配置误区:
- 不要用全局默认区域初始化客户端,操作源桶和目标桶的客户端要分别绑定对应区域
- 调用复制接口时,必须在复制源参数中明确声明源桶所在区域,不能省略
可直接运行的实现代码如下:
import boto3 from botocore.config import Config def cross_region_s3_recursive_copy( source_bucket: str, source_region: str, target_bucket: str, target_region: str, source_prefix: str = "", target_prefix: str = "" ): # 初始化绑定目标区域的S3客户端,复制请求需发往目标区域端点 target_s3_client = boto3.client( "s3", region_name=target_region, config=Config(signature_version="s3v4") ) # 初始化绑定源区域的客户端,用于遍历源桶对象 source_s3_client = boto3.client("s3", region_name=source_region) # 分页遍历源桶指定前缀下所有对象,实现--recursive等效逻辑 paginator = source_s3_client.get_paginator("list_objects_v2") for page in paginator.paginate(Bucket=source_bucket, Prefix=source_prefix): if "Contents" not in page: continue for obj in page["Contents"]: source_key = obj["Key"] # 跳过S3目录占位对象 if source_key.endswith("/"): continue target_key = source_key.replace(source_prefix, target_prefix, 1) print(f"复制中: s3://{source_bucket}/{source_key} -> s3://{target_bucket}/{target_key}") # 发起跨区域复制请求,显式指定源区域 target_s3_client.copy( CopySource={ "Bucket": source_bucket, "Key": source_key, "SourceRegion": source_region }, Bucket=target_bucket, Key=target_key ) if __name__ == "__main__": # 参数与你给出的AWS CLI命令完全对应 cross_region_s3_recursive_copy( source_bucket="source-bucket", source_region="region1", target_bucket="target-bucket", target_region="region2" )
之前方案失效的常见原因
你之前用boto3.resource + meta.client.copy的方案无法适配跨区域,基本是以下问题导致的:
- 初始化resource时没有指定目标区域,客户端默认读取本地AWS配置的默认区域,跨区域请求会被S3路由拦截
- 调用copy方法时,
CopySource参数没有传入SourceRegion字段,S3服务端无法定位跨区域的源桶,直接返回访问错误 - 没有实现分页遍历对象的逻辑:不管是AWS CLI还是boto3,
copy方法本身只支持单对象复制,--recursive的递归效果是上层封装了“列对象+逐个复制”的逻辑,不是接口自带能力
注意:上述单对象复制接口最大支持5GB大小的文件,如果桶内存在超过5GB的大对象,需要改用S3分片复制接口实现,和AWS CLI自动适配大对象的逻辑一致。
内容的提问来源于stack exchange,提问作者Atin Bansal
相关产品推荐
相关产品推荐

