Scaleway跨区域S3复制:Boto3/AWS CLI失败,求纯Boto3方案
问题:使用Boto3跨区域复制Scaleway存储桶对象失败,寻求纯Boto3解决方案
概述
我在使用boto3/aws cli跨区域复制Scaleway(非AWS)存储桶文件时遇到问题,无法用boto3实现,但已通过rclone解决,希望了解是否仍可使用boto3以减少依赖。
问题描述
使用Boto3或AWS CLI执行跨区域S3复制时,Boto3的SourceClient参数与AWS CLI的--endpoint-url参数未被正确应用,导致不通过本地下载直接跨区域复制对象时出错。
预期行为:借助SourceClient解析源存储桶区域,成功跨区域复制对象。
实际报错:
botocore.exceptions.ClientError: An error occurred (NoSuchBucket) when calling the CopyObject operation: The specified bucket does not exist
复制命令未使用SourceClient的信息,仅调用方法的客户端信息(凭证、区域等)。
使用AWS CLI测试也出现相同问题:
aws s3 sync s3://source-bucket s3://dest-bucket \ --source-region fr-par \ --region nl-ams \ --endpoint-url https://s3.fr-par.scw.cloud \ --profile mys3profile
CLI会回退到amazonaws端点:
fatal error: Could not connect to the endpoint URL: "https://source-bucket.s3.fr-par.amazonaws.com/?list-type=2&prefix=&encoding-type=url"
复现步骤
import boto3 from dotenv import dotenv_values config = dotenv_values(".env") # 初始化源端和目标端客户端 s3_session = boto3.Session( aws_access_key_id=config.get("SCW_ACCESS_KEY"), aws_secret_access_key=config.get("SCW_SECRET_KEY"), region_name="fr-par", ) src_s3 = s3_session.client( service_name="s3", region_name="fr-par", endpoint_url="https://s3.fr-par.scw.cloud", ) s3_session = boto3.Session( aws_access_key_id=config.get("SCW_ACCESS_KEY"), aws_secret_access_key=config.get("SCW_SECRET_KEY"), region_name="nl-ams", ) dest_s3 = s3_session.client( service_name="s3", region_name="nl-ams", endpoint_url="https://s3.nl-ams.scw.cloud", ) # 设置源端和目标端参数 copy_source = { "Bucket": "source_bucket_name", "Key": "source_object_name", } # 尝试通过SourceClient复制 dest_s3.copy( copy_source, "destination_bucket_name", source_object_name, SourceClient=src_s3 )
现有解决方案
目前无法用boto3实现,但通过rclone找到可行方案。
配置文件示例(放置于~/.config/rclone/rclone.conf):
[scw_s3_fr] type = s3 provider = Scaleway access_key_id = ... secret_access_key = ... region = fr-par endpoint = s3.fr-par.scw.cloud acl = private [scw_s3_nl] type = s3 provider = Scaleway access_key_id = ... secret_access_key = ... region = nl-ams endpoint = s3.nl-ams.scw.cloud acl = private
单向同步命令:
rclone sync scw_s3_fr:source-bucket scw_s3_nl:destination-bucket -P --metadata --checksum --check-first
核心问题
请问我哪里配置出错了?能否指导我正确配置,实现纯boto3的跨区域S3复制方案?
环境信息
- Python 3.11.2 (main, Mar 7 2023, 16:53:12) [GCC 12.2.1 20230201] on linux
- boto3='1.35.66'
内容的提问来源于Stack Exchange,提问作者Daan
相关产品推荐
相关产品推荐

