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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:11:18