使用 Rclone 将数据从 Microsoft Azure Blob 迁移至 Amazon S3 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Rclone 将数据从 Microsoft Azure Blob 迁移至 Amazon S3

由 Suhas Basavaraj (AWS)、Aidan Keane () 和 Corey Lane (AWS) 创作 AWS

摘要

此模式描述如何使用克隆将数据从 Microsoft Azure Blob 对象存储迁移到 Amazon Simple Storage Service (Amazon S3) 存储桶。您可使用此模式对数据执行一次性迁移或持续同步。Rclone 是用 Go 编写的命令行程序,用于跨云提供商的各种存储技术移动数据。

先决条件和限制

先决条件

  • 一个活跃的AWS账户

  • 存储在 Azure Blob 容器服务的数据

架构

源技术堆栈

  • Azure Blob 存储容器

目标技术堆栈

  • Amazon S3 存储桶

  • 亚马逊弹性计算云 (亚马逊EC2) Linux 实例

架构

将数据从 Microsoft Azure 迁移至 Amazon S3

工具

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

  • Rclone 是一款受 rsync 启发的开源命令行程序。它用于管理许多云存储平台文件。

最佳实践

将数据从 Azure 迁移至 Amazon S3 时,请注意以下注意事项,以避免不必要的成本或传输速度变慢:

  • 在与 Azure 存储帐户和 Blob 容器相同的地理区域中创建AWS基础架构,例如AWS区域us-east-1(弗吉尼亚北部)和 Azure 区域。East US

  • 尽可能避免使用 NAT Gateway,因为它会产生入口和出口带宽的数据传输费用。

  • 使用 A mazon S3 的VPC网关终端节点来提高性能。

  • 考虑使用基于 AWS Graviton2 (ARM) 处理器的实例,以获得比英特尔 x EC2 86 实例更低的成本和更高的性能。Rclone 经过大量交叉编译,并提供了预ARM编译的二进制文件。

操作说明

任务描述所需技能

准备目标 S3 存储桶。

在相应AWS区域@@ 创建新的 S3 存储桶,或选择现有存储桶作为要迁移的数据的目的地。

AWS 管理员

为 Amazon 创建IAM实例角色EC2。

为@@ 亚马逊创建一个新的 Ident AWS ity and Access Management (IAM) 角色EC2。此角色授予您的EC2实例对目标 S3 存储桶的写入权限。

AWS 管理员

将策略附加到IAM实例角色。

使用IAM控制台或AWS命令行界面 (AWSCLI) 为EC2实例角色创建内联策略,该策略允许对目标 S3 存储桶进行写入访问权限。有关示例策略,请参阅其他信息部分。

AWS 管理员

启动 EC2 实例。

启动配置为使用新创建的IAM服务角色的 Amazon Linux EC2 实例。此实例还需要通过互联网访问 Azure 公共API端点。 

注意

考虑使用AWS基于 Graviton 的EC2实例来降低成本。Rclone 提供ARM编译后的二进制文件。

AWS 管理员

创建 Azure AD 服务主体。

使用 Azure CLI 创建 Azure 活动目录 (Azure AD) 服务主体,该主体对源 Azure Blob 存储容器具有只读访问权限。有关说明,请参阅其他信息部分。将这些证书存储在您的EC2实例上,存储到相应的位置~/azure-principal.json

云管理员,Azure
任务描述所需技能

下载并安装 Rclone。

下载和安装 Rclone 命令行程序。有关安装说明,请参阅 Rclone 安装文档

将军AWS,云管理员

配置 Rclone。

复制以下 rclone.conf 示例文件。AZStorageAccount替换为你的 Azure 存储帐户名和 us-east-1 S3 存储桶所在的AWS区域。将此文件保存到您的EC2实例~/.config/rclone/rclone.conf上的相应位置。

[AZStorageAccount] type = azureblob account = AZStorageAccount service_principal_file = azure-principal.json [s3] type = s3 provider = AWS env_auth = true region = us-east-1
将军AWS,云管理员

验证 Rclone 配置。

若要确认 Rclone 已配置且权限是否正常运行,请验证 Rclone 是否可以解析您的配置文件,以及 Azure Blob 容器和 S3 存储桶中的对象是否可以访问。有关示例验证命令,请参阅以下内容。

  • 在配置文件中列出已配置遥控器。这会确保您的配置文件得到正确解析。查看输出,确保它与您的 rclone.conf 文件匹配。

    rclone listremotes AZStorageAccount: s3:
  • 列出已配置账户的 Azure Blob 容器。将 AZStorageAccount 替换 rclone.conf 文件中的使用的存储账户。

    rclone lsd AZStorageAccount: 2020-04-29 08:29:26 docs
  • 列出 Azure Blob 容器文件。将此命令中的 docs 替换为 Azure 存储账户中的实际 Blob 容器名称。

    rclone ls AZStorageAccount:docs 824884 administrator-en.a4.pdf
  • 列出您AWS账户中的存储桶。

    [root@ip-10-0-20-157 ~]# rclone lsd s3: 2022-03-07 01:44:40 amzn-s3-demo-bucket1 2022-03-07 01:45:16 amzn-s3-demo-bucket2 2022-03-07 02:12:07 amzn-s3-demo-bucket3
  • 列出 S3 存储桶内的文件。

    [root@ip-10-0-20-157 ~]# rclone ls s3:amzn-s3-demo-bucket1 template0.yaml template1.yaml
将军AWS,云管理员
任务描述所需技能

从容器迁移数据。

运行 Rclone 复制或者同步命令。 

示例:复制

此命令将数据从源 Azure Blob 容器复制至目标 S3 存储桶。

rclone copy AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1

示例:同步

此命令在源 Azure Blob 容器和目标 S3 存储桶间同步数据。

rclone sync AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1
重要

使用同步命令时,源容器中不存在的数据将从目标 S3 存储桶中删除。

将军AWS,云管理员

同步容器。

初始复制完成后,运行 Rclone sync 命令以进行持续迁移,这样只会复制目标 S3 存储桶中缺少的新文件。

将军AWS,云管理员

验证数据是否成功迁移。

若要检查数据是否已成功复制到目标 S3 存储桶,请运行Rclone lsdls 命令。

将军AWS,云管理员

相关资源

其他信息

实例的角色策略示EC2例

该策略授予您的EC2实例对您账户中特定存储桶的读写权限。如果您的存储桶使用客户托管密钥进行服务器端加密,则该策略可能需要对AWS密钥管理服务(AWSKMS)的额外访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:DeleteObject", "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::amzn-s3-demo-bucket" ] }, { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" } ] }

创建只读 Azure AD 服务主体

Azure 服务主体是客户应用程序、服务和自动化工具用来访问特定 Azure 资源的安全标识。可以将其视为具有特定角色和严格控制访问资源的权限的用户身份(登录名和密码或证书)。要创建只读服务主体、以遵循最低权限并保护 Azure 中的数据免遭意外删除,请按照以下步骤操作:

  1. 登录你的 Microsoft Azure 云账户门户,在工作站上启动 Cloud Shell PowerShell 或者使用 Azure 命令行界面 (CLI)。

  2. 创建服务主体,并将其配置为对 Azure Blob 存储账户的只读访问权限。将此命令的JSON输出保存到名为的本地文件中azure-principal.json。该文件将上传到您的EC2实例。将大括号({})中显示的占位符变量替换为您的 Azure 订阅 ID、资源组名称和存储账户名称。

    az ad sp create-for-rbac ` --name AWS-Rclone-Reader ` --role "Storage Blob Data Reader" ` --scopes /subscriptions/{Subscription ID}/resourceGroups/{Resource Group Name}/providers/Microsoft.Storage/storageAccounts/{Storage Account Name}