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

从Digital Ocean Space迁移至Amazon AWS的技术问题求助

从Digital Ocean Spaces迁移到AWS S3的可行方案(适配36GB大规模图片)

我刚好处理过类似的跨云存储大规模迁移需求,给你几个实用的方案,覆盖从简单CLI工具到自定义脚本的场景,完美适配你数千张图片的迁移需求:

方案1:用rclone(最省心的跨存储同步工具)

rclone是专门针对云存储同步的工具,支持所有S3兼容存储(包括DO Spaces和AWS S3),操作简单且效率高,适合非编程用户。

步骤:

  1. 安装rclone:根据你的系统选择安装方式(比如Linux用apt install rclone,macOS用brew install rclone,Windows直接下载安装包)
  2. 配置远程存储:
    • 运行rclone config,选择n新建远程
    • 先配置Digital Ocean Spaces:
      • 类型选S3,供应商选DigitalOcean
      • 输入你的DO Spaces Access Key和Secret Key
      • 输入对应区域的endpoint(比如nyc3.digitaloceanspaces.com,根据你的Space所在地调整)
      • 完成后命名为do-space
    • 再配置AWS S3:
      • 同样选S3,供应商选AWS
      • 可以选择用本地已有的AWS凭证(比如~/.aws/credentials)或者直接输入Access Key和Secret Key
      • 完成后命名为aws-s3
  3. 开始同步:
    运行同步命令,把DO Space的内容完整同步到AWS S3:
    rclone sync do-space:your-do-bucket-name aws-s3:your-aws-bucket-name --progress --transfers 32 --retries 5
    
    • --progress:显示实时迁移进度,方便你跟踪状态
    • --transfers:调整并发上传/下载数(默认是4,32适合大规模文件迁移,可根据你的网络带宽微调)
    • --retries:设置失败重试次数,避免网络波动导致迁移中断

方案2:用s5cmd(针对S3兼容存储的高速批量工具)

s5cmd是比AWS CLI更快的批量操作工具,天生支持S3兼容API,适合需要极致迁移速度的场景。

步骤:

  1. 安装s5cmd:下载对应系统的二进制包(比如Linux用curl -LO https://github.com/peak/s5cmd/releases/latest/download/s5cmd_$(uname -s)_$(uname -m).tar.gz,解压后即可使用)
  2. 配置双端凭证:
    • 创建一个credentials.ini文件,同时包含DO和AWS的凭证:
      [default]
      aws_access_key_id = YOUR_DO_ACCESS_KEY
      aws_secret_access_key = YOUR_DO_SECRET_KEY
      
      [aws-profile]
      aws_access_key_id = YOUR_AWS_ACCESS_KEY
      aws_secret_access_key = YOUR_AWS_SECRET_KEY
      
  3. 执行批量复制:
    直接从DO Space复制到AWS S3,指定DO的endpoint和AWS凭证:
    s5cmd --endpoint-url https://nyc3.digitaloceanspaces.com --credentials-file ./credentials.ini cp s3://your-do-bucket-name/* s3://your-aws-bucket-name/ --profile aws-profile --numworkers 32 --retry 3
    
    • --endpoint-url:指定DO Spaces的区域endpoint
    • --profile aws-profile:使用配置文件里的AWS凭证
    • --numworkers:设置并发处理的worker数,大幅提升批量文件迁移速度

方案3:Python自定义脚本(适合需要自定义逻辑的场景)

如果你需要对迁移过程做个性化处理(比如过滤特定尺寸的图片、修改文件名前缀等),可以用Python脚本实现——因为DO Spaces完全兼容S3 API,所以用boto3就能同时连接DO和AWS两端。

示例脚本(流式传输,无需本地存储):

import boto3
from botocore.config import Config
from concurrent.futures import ThreadPoolExecutor

# 配置Digital Ocean Spaces客户端
do_config = Config(
    region_name='nyc3',  # 替换为你的Space区域
    signature_version='s3v4',
)
do_s3 = boto3.client(
    's3',
    endpoint_url='https://nyc3.digitaloceanspaces.com',
    aws_access_key_id='YOUR_DO_ACCESS_KEY',
    aws_secret_access_key='YOUR_DO_SECRET_KEY',
    config=do_config
)

# 配置AWS S3客户端(自动读取本地~/.aws/credentials,也可手动输入密钥)
aws_s3 = boto3.client('s3')

DO_BUCKET = 'your-do-bucket-name'
AWS_BUCKET = 'your-aws-bucket-name'
MAX_WORKERS = 16  # 并发数,根据机器性能调整

def transfer_single_object(key):
    try:
        # 从DO Space流式获取对象,无需下载到本地
        do_obj = do_s3.get_object(Bucket=DO_BUCKET, Key=key)
        # 直接流式上传到AWS S3,保留原文件的Content-Type
        aws_s3.put_object(
            Bucket=AWS_BUCKET,
            Key=key,
            Body=do_obj['Body'],
            ContentType=do_obj['ContentType']
        )
        print(f✅ 成功迁移:{key}")
    except Exception as e:
        print(f❌ 迁移失败 {key}:{str(e)}")

def main():
    # 分页列出DO Space里的所有对象(避免一次性加载过多数据)
    paginator = do_s3.get_paginator('list_objects_v2')
    for page in paginator.paginate(Bucket=DO_BUCKET):
        if 'Contents' not in page:
            continue
        # 提取所有对象的Key
        object_keys = [obj['Key'] for obj in page['Contents']]
        # 用线程池并发处理,提升迁移效率
        with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
            executor.map(transfer_single_object, object_keys)

if __name__ == "__main__":
    main()

迁移关键注意事项

  • 先做小批量测试:先挑选10-20个文件测试迁移,确认权限、路径和文件完整性都没问题后再跑全量
  • 权限验证:确保DO的Access Key拥有Space的读取权限,AWS的Access Key拥有S3桶的写入权限
  • 断点续传支持:rclone和s5cmd都自带断点续传功能,如果迁移中途中断,重新运行命令即可继续未完成的部分
  • 成本预估:DO的出口流量和AWS的入口流量可能产生费用,建议先查看双方的定价文档,提前预估成本

内容的提问来源于stack exchange,提问作者Marcelo Agimóvel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:26:01