AWS 的简单存储服务 (S3) 非常适合存储大量对象,但它也是一种与许多其他竞争服务兼容的 API。如果您想离开 AWS,转移 S3 存储桶很容易。
这是如何运作的?
如果您传入和传出的两个服务都兼容 S3,您可以简单地使用类似 的实用程序rclone,配置为访问每个服务,将所有项目传输过来。例如,您可以从 S3 转移到 Digital Ocean 的兼容 Spaces 服务,或者从一个账户中的 S3 存储桶转移到另一个账户。
为了处理传输,rclone 将从源bucket中读取,找到所有需要传输的文件,并将它们克隆到目标bucket中。rclone 还可以处理文件更新,如果在传输时写入源存储桶,这会很有用。
就传输时间而言,可能需要一段时间,具体取决于存储桶的大小。文件数量也是一个问题,因为rclone 每次传输都会增加开销。如果您有数百万个或数 TB 的文件,您应该为数小时的传输时间做好准备。
幸运的是,您可以在存储桶仍在积极写入时执行大型初始传输。在最终切换之前,您可能需要一些停机时间来确保存储桶同步。如果这是一个问题,还有其他工具可用于无缝传输,包括商业工具,如NetApp Cloud Sync,可以将多个存储桶同步在一起。
一些云服务,如 Google Cloud Platform,有自己的服务可以处理传输。如果您要迁移到支持此功能的平台,您可能希望改用他们的服务。
设置 rclone
最简单的方法是rclone 在自己的服务器上设置来处理传输操作。您需要在后台运行它,或者通过一个tmux 窗口运行它,这样您就可以断开与长时间传输的连接。
rclone 可从大多数包管理器获得:
apt install rclone -y
rclone 主要用于在本地或 SSH 兼容服务器之间传输文件,因此需要一些配置来处理 S3 服务之间的传输。该文件位于:
~/.config/rclone/rclone.conf
添加具有以下配置的新块,将其连接到您的 AWS 账户(不是特定的存储桶):
[s3]
type = s3
env_auth = false
acl = private
access_key_id = ACCESS_KEY
secret_access_key = SECRET_KEY
region = REGION
location_constraint = LOCATION_CONSTRAINT
您需要使用您的访问密钥和密码填写配置,然后输入您的存储桶区域。您可以从 AWS 文档 中找到区域列表。
您需要为要转移到的其他服务填写另一个块。如果您在 AWS 账户之间移动,则需要一个单独的密钥来访问该账户。如果您要迁移到 DO Spaces 之类的服务,则需要定义另一个配置了新端点的块:
[spaces]
type = s3
env_auth = false
acl = private
access_key_id = ACCESS_KEY
secret_access_key = SECRET_KEY
endpoint = nyc3.digitaloceanspaces.com
在任何情况下,您都需要在块标题上为其指定一个新名称,因为它们是两个独立的遥控器。
执行转移
配置完成后,您将能够查看所有可能的遥控器
rclone listremotes
s3:
spaces:
您可以使用端点名称后跟冒号和存储桶名称来查看存储桶的内容。
rclone tree s3:source-bucket
然后,您可以运行同步,并使用一些额外的标志以获得最佳性能:
rclone sync source:/source-bucket \
destination:/destination-bucket \
-P -v --log-file /var/log/rclone/rclone-1.log \
--create-empty-src-dirs --s3-chunk-size 20M \
--s3-upload-concurrency 64 --checksum
该-P 标志将允许您在终端中以交互方式查看进度,并估计需要多长时间。
rclone sync 将简单地扫描源存储并更新目标存储桶。您可以在传输完成后继续修改源存储。完成后,您可以运行其他传输并继续将存储同步在一起。