使用 Rclone 将数据从 Google Drive 迁移到 Amazon S3

Olawale Olaleye
难度
300 - 高级
时间
30 分钟
前提条件

海外区域: 注册 / 登录 亚马逊云科技

上次更新时间
2024 年 9 月 3 日

无论您选择完全在亚马逊云科技上运营,还是在多云和混合云环境中运营,亚马逊云科技都值得采用的一项主要原因是我们提供了广泛的服务选择,能够帮助您创新、构建、部署和监控工作负载。

对于寻求综合存储解决方案的 Google Drive 用户而言,Amazon S3 是一个不错的选择。作为一种兼具性能和成本效益比的存储选项,Amazon S3 可提供极高的持久性和可用性,以及几乎无限的可扩展性。由于采用即用即付定价模式,并包含各种针对访问模式和成本需求优化过的存储类,从管理任务关键型数据,到存储数据以供备份和存档,Amazon S3 可满足多种需求。而要将数据从 Google Drive 迁移到 Amazon S3,您可采用 Rclone,这款开源的命令行工具可提供简化的数据迁移解决方案。

在本文中,我们将演示如何使用 Rclone 将数据从 Google Drive 迁移到 Amazon S3。我们将逐步介绍如何设置 Amazon Elastic Compute Cloud (EC2) 实例,并在其上安装和配置 Rclone,从而实现将数据从 Google Drive 迁移到 Amazon S3。其中,我们将借助 AWS CloudFormation 自动完成大部分的设置流程。接着,我们将探索各类 Rclone 标志,以在解决服务配额问题的同时,缩短数据迁移时间。由于原生支持 Google Drive 和 Amazon S3,Rclone 可以简化迁移流程,并实现同步且高效的数据迁移。此外,由于提供可自定义的配置选项,例如,控制并发迁移和设置事务速度限制等,Rclone 还可帮助您优化迁移流程。

解决方案概述

下图展示的是使用安装有 Rclone 的 Amazon EC2 实例将数据从 Google Drive 迁移到 Amazon S3 的架构图。其中,通过 AWS CloudFormation 配置的 Amazon EC2 实例将作为中介,简化该数据迁移流程;而在 Amazon EC2 实例上运行的Rclone 则负责将数据从 Google Drive 复制到 Amazon S3。

图 1:使用 Rclone 将数据从 Google Drive 迁移到 Amazon S3 的架构图

借助 AWS CloudFormation,Amazon EC2 实例的部署和配置以及 Rclone 的安装均可自动完成。这有助于确保环境一致性和可复制性,同时最大限度地减少手动错误,节约时间,并降低工作量。而配置在 Amazon EC2 实例上的 Rclone 可以同时连接 Google Drive 和 Amazon S3,实现从 Google Drive 到 Amazon S3 的高效数据迁移。

先决条件

以下是实现本解决方案所需的先决条件:

查看 AWS CloudFormation 模板,了解 AWS IAM 用户权限,并根据需要进行更改。有关更多详细内容,请参阅 AWS IAM 政策最佳实践。同样,如有需要,请检查并更新 Amazon EC2 实例安全组

AWS CloudFormation 可自动完成 Rclone 对 Amazon S3 的设置,但连接到 Amazon EC2 实例后的 Google Drive 令牌授权需要手动完成。相关内容我们将在后文中介绍。

请注意,本文中的示例解决方案只可在美国东部(弗吉尼亚北部)区域 us-east-1 运行。如果您想在其他亚马逊云科技区域部署本解决方案,请参阅本文“在其他亚马逊云科技区域部署”部分的说明。

演示

在本文中,将数据从 Google Drive 迁移到 Amazon S3 的步骤包括:

  1. 部署 AWS CloudFormation 模板并在其上配置 Amazon EC2 实例,安装 Rclone,以及配置 Rclone 远程连接。
  2. 连接到 Amazon EC2 实例后,完成 Google Drive 令牌授权。
  3. 使用 Rclone 命令将数据从 Google Drive 迁移到 Amazon S3。

下面我们将详细介绍每个步骤。

1. 部署 AWS CloudFormation 堆栈

本节将向您演示如何部署 AWS CloudFormation 模板,以为数据迁移创建必要的资源。

1.1 创建堆栈

1.1.1 在此链接下载本解决方案所用的 AWS CloudFormation 模板 Final-CFT-GDrive-S3-Review.yaml,然后访问 AWS CloudFormation 控制台

1.1.2 在堆栈页面,选择右上方的创建堆栈,然后选择使用新资源(标准)

1.1.3 在创建堆栈页面的准备模板部分,选择选择现有模板。在指定模板部分,依次选择上传模板文件 > 选择文件,然后选择此前下载的 AWS CloudFormation 模板 Final-CFT-GDrive-S3-Review.yaml

1.1.4 选择下一步

1.2 指定堆栈详情

图 2:AWS CloudFormation 堆栈配置

1.2.1 提供唯一的堆栈名称,如上图所示。例如,“Rclone-GDrive-to-S3”。

1.2.2 选择用于创建 Amazon EC2 实例的 Amazon VPC子网

1.2.3 输入要使用的实例类型。有关选择兼容实例类型的详细信息,请参阅先决条件部分中的说明。

1.2.4 选择 Amazon EC2 密钥对

1.2.5 输入允许入站流量进入实例的 IP 地址范围。

1.2.6 输入此前在 Google Drive API 控制台创建的客户端 ID客户端密钥

1.3 配置堆栈选项

保留默认选项,选择“下一步”。

1.4 检查并创建

在功能部分,选择底部的勾选标记。然后选择同意并确认创建 AWS IAM 资源,最后选择提交。

2. Google Drive授权令牌

本节将向您演示如何授权 Rclone 访问您的 Google Drive 账户。

2.1 远程连接 Google Drive

部署完 AWS CloudFormation 后,连接到您的 Amazon EC2 实例:“Rclone 实例——GDrive to S3”。

连接到 Amazon EC2 实例后,第一步是授权 Rclone 访问 Google Drive。这是允许 Rclone 访问的额外安全步骤,其中您需要提供 Google Drive 的 client_idclient_secret

由于当前使用的是远程或无头计算机,请运行以下命令,并输入 n。之所以选择 n 是因为基于 Ubuntu 的 Amazon EC2 实例上没有浏览器。

rclone config reconnect gdrive-remote:

图 3:配置 Rclone 以远程连接到 Google Drive

输入 n 后,Rclone 会提供一个链接,以从 Google 获取 Rclone 所需的令牌,如下图所示。然后,复制该链接并将其粘贴到浏览器中。请确保您已登录与要访问的 Google Drive 关联的 Google 账户。

图 4:访问 Rclone 提供的链接以获得 Google Drive 的授权

2.2 获得Google Drive 的授权

完成 Google 的一系列提示后,您将在屏幕上看到如下图所示的内容,其中包含授权代码。到了这一步,屏幕上会显示以下提示:选择账户 > Rclone 想要访问您的 Google 账户 > 授权代码

图 5:Google 提供的授权代码

复制授权代码并返回 Rclone Amazon EC2 实例,然后将其粘贴到输入验证代码 > 字段中。

接着,Rclone 会显示提示,询问您是否希望将其配置为 团队云盘,如下图所示。您需要根据自己的用例做出适当选择。

图 6:Google 向 Rclone 提供授权代码

2.3 Rclone 的远程连接配置

使用 AWS CloudFormation 模板配置 Amazon EC2 实例时,系统会根据 Amazon S3 和 Google Drive 配置为 Rclone 创建初始配置文件。运行以下代码即可显示该初始配置文件,如下图所示。

nano /home/ubuntu/.config/rclone/rclone.conf

图 7:Rclone 配置文件

如果您想按照自己的需求创建或更新配置,可以访问文件路径直接编辑该配置文件。或者,您也可以在连接到实例后,运行 rclone config 命令进入交互式配置会话,然后在会话中编辑或更新配置,如下图所示。

图 8:编辑 Rclone 配置

有关自定义远程连接以满足您需求的详细说明,请参阅 Amazon S3 Rclone 配置Google Drive Rclone 配置

3. 在 Google Drive 和 Amazon S3 之间迁移和处理文件

本节将向您演示如何使用 Rclone 将数据从 Google Drive 迁移到 Amazon S3,并执行各类文件管理操作。

在本文中,Google Drive 和Amazon S3 远程连接的名称分别为 gdrive-remote s3-remote。您可以运行以下命令列出指定路径中的对象。

rclone ls <remote>:<folder_name>/<subfolder_name>
rclone ls <remote>:<bucket_name>/<folder_name>

图 9:使用 Rclone 列表命令远程列出指定路径中的对象

第一步是将文件从一个远程连接复制到另一个远程连接。Rclone 的复制命令会将文件从源路径复制到目标路径。出于测试目的,我们假设从 Google Drive 迁移到 Amazon S3 的数据大小约为 1TB。

直接用于复制的命令如下:

rclone copy <source>:<sourcepath> <dest>:<destpath>

但是,为了适应存储服务商提供的配额,同时优化迁移速度,您还需要其他条件。Rclone 标志扩充了 Rclone 命令的原有功能,使您能够更高效地远程管理数据。借助合适的标志,您不仅能够适应配额,同时还能缩短数据迁移的时间。

下面,我们从代码开始,了解这些标志的工作原理,并在最后将其用于迁移数据。

rclone copy \
--tpslimit 200 \
--transfers 200 \
--buffer-size 200M \
--checkers 400 \
--s3-upload-cutoff 100M \
--s3-chunk-size 100M \
--s3-upload-concurrency 50 \
gdrive-remote: \
s3-remote: EXAMPLE-DESTINATION-BUCKET \
-P

-P/--progress 标志可以帮助您在文件操作期间查看实时迁移统计数据。以下是具有其他功能的标志:

--tpslimit 可以帮助您指定或限制每秒事务数 (TPS)。其中,事务或查询可以是 PUT/GET/POST 请求(如果使用 HTTP 后端)。

--transfers 可以控制并行迁移的文件数。Rclone 默认执行四个并行迁移。

--buffer-size=SIZE 可以指定每次迁移时的缓冲区大小,从而提高迁移速度,每个 --transfer 会使用指定大小的内存进行缓冲。

--checkers=N 可以控制操作期间(例如,复制文件)并行的文件检查器数量。检查器可以验证文件完整性,从而确保正确迁移。

  • Rclone 支持 Amazon S3 分段上传。分段上传可以将单个对象拆分为多个部分上传,每个部分分别代表该对象数据的某个连续部分。当对象大小超过 100 MB 时,建议使用分段上传而非单次操作。有关更多信息,请参阅使用 Rclone 进行分段上传

Google Drive 配额

由于 Google Drive API 是一项多用户共享服务,因此 Google 设置了一些配额,例如,指定时间内的事务数/查询数。

有关更多信息,请参阅 Google Drive 的用量限额

如要查看配额,请参阅Google Cloud查看和管理配额文档,或者您也可以遵循以下步骤:

1. 访问 Google API 控制台

2. 选择您的项目。在已启用的 API 和服务部分,选择 Google Drive API

3. 在配额和系统限制部分,您可以看到“每分钟查询数”和“每个用户的每分钟查询数”等属性。

在本例中,“每分钟查询数”和“每个用户的每分钟查询数”为 12,000 次,也就是每秒约 200 次。

Amazon S3 配额

相较于 Google Drive,Amazon S3 所允许的查询数要多得多。每个分区的 Amazon S3 前缀最少允许每秒 3,500 次的 PUT/COPY/POST/DELETE 请求或每秒 5,500 次的 GET/HEAD 请求,并且每个存储桶的前缀数量没有限制。

在扩展期间,可能会出现 503 错误(速度变慢),但该错误在扩展完成后就会消失。有关优化Amazon S3 性能的内容,请参阅最佳实践设计模式

为了确保不超出配额限制,请同时考虑这两个远程连接的值,并将 --tpslimit 设置为两者中的最小值。但是,由于本例中的 Google Drive 只允许每秒 200 次的查询,请将 --tpslimit 标志设置为 200。

下面您就可以执行上述命令。从下图中可以看到,将 1001.06 GB 的数据从 Google Drive 迁移到 Amazon S3 大约用了 10 分钟 15.7 秒

图 10.1:Rclone 复制命令包含多种用于将数据从 Google Drive 复制到 Amazon S3 存储桶的标志

图 10.2:复制命令的输出显示了迁移详情

检查:验证源路径和目标路径中的文件是否相同。

rclone check gdrive-remote: EXAMPLE-DESTINATION-BUCKET -P

图 11:Rclone 检查命令

删除:删除指定路径中的文件。

rclone delete gdrive-remote:gdrive-test-folder-2 -P

图 12:Rclone 删除命令

有关包含 rclone sync(用于同步源路径和目标路径)等可用命令的完整列表,请参阅 Rclone 命令文档。

监控 Amazon EC2 实例

请参阅 Rclone 文档了解更多有关这些标志以及何时修改这些标志的值的信息。本文中讨论的标志主要使用 Amazon EC2 实例的网络带宽和内存。建议您在监控实例性能期间,对标志尝试不同的值,从而在 Amazon EC2 实例的限制内实现最佳效果。

例如,如果您使用上述命令迁移 1 TB 数据进行测试,您会发现,Amazon EC2 实例的 CPU 占用率为 30%,内存占用率为 60%,网络占用率为 70%。理想情况下,所有数值都应低于 100%,但如果还想更安全一点的话,则应低于 90%。因此,这些指标表明 --transfers 等标志的值还可以再提高一点,从而改善迁移流程。

您可以使用 Amazon CloudWatch监控您的 Amazon EC2 实例,Amazon CloudWatch 是一项应用程序性能监控服务。

优化数据迁移流程的其他方法

以下方法可以帮助您进一步改善数据迁移流程:

1. 提高计算性能:一种直接方法是选择性能更好的 Amazon EC2 实例类型,并平衡 Amazon EC2 使用时间、实例成本和数据迁移完成时间。

2. TPS 配额:解决 TPS 配额问题的一种方法是请求 Google 增加配额

3. 其他相关 Rclone 标志:您可以查看以下指标,评估其是否符合您的需求。请注意,其中部分标志可能会超过 TPS 等配额值,所以请谨慎使用:

在其他亚马逊云科技区域部署

如要在弗吉尼亚北部以外的其他亚马逊云科技区域部署本解决方案,请按照以下步骤对其进行修改:

  • 将 AWS CloudFormation 模板中的 ImageId 值替换为要使用的架构和亚马逊云科技区域的“Ubuntu Server 22.04 LTS (HVM), SSD Volume Type”的 Amazon Machine Image (AMI) ID。有关详细信息,请参阅查找 Linux AMI文档。
  • 将 AWS CloudFormation 模板中的 region 值替换为要使用的亚马逊云科技区域代码。

清理

您可能需要删除在本文中创建的资源,以避免未来产生不必要的费用。要删除这些堆栈资源,您可以删除 AWS CloudFormation 堆栈。除此之外,您还需访问 Google Cloud 控制台上的凭据页面,删除此前创建的 OAuth 凭据。

总结

在本文中,我们探讨了如何使用 Rclone 将海量数据从 Google Drive 高效迁移到 Amazon S3。其中,我们借助 AWS CloudFormation 自动完成了 Amazon EC2 实例创建的设置、Rclone 的安装以及远程连接的配置,从而减少了手动操作和潜在错误。接着,我们探讨了各类 Rclone 标志,这些标志可以在服务配额内优化迁移时间,从而帮助您避免拥塞和延迟。借助本解决方案,您可以根据具体需求自定义数据迁移流程,使其即便面对规模更大的数据集,也能确保迁移始终保持高效和可靠。

通过将数据迁移到 Amazon S3,您不仅可以节约成本,还能利用其可扩展性和性能使其成为数据湖、分析和 ML/AI 应用程序的不二之选。除此之外,由于 Amazon S3 可提供广泛的安全功能,并符合各类合规性要求,您还可以增强数据保护和治理。

欢迎查看其他可能有助于迁移数据和监控的文章:

更多教程

快速搭建容量高达 35GB 的免费个人网盘

本教程将介绍如何搭建一个没有使用限制的免费私人网盘。

构建企业专属智能客服机器人

本文将演示如何结合多种服务,打造企业专属的智能客服。

使用生成式 AI 构建多语言问答知识库

使用多种服务,构建可汇总搜索结果的多语言知识库。

查看全部教程 >>

免费套餐

AWS 海外区域

拓展海外业务或个人体验
免费使用 100 余种云产品或服务, 长达 12 个月

AWS 中国区域

发展中国业务
免费使用 40 余种核心云服务产品,长达 12 个月