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

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

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

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

环境:PoC 或试点

来源:Microsoft Azure 存储容器

目标:Amazon S3 存储桶

R 类型:更换平台

工作负载:Microsoft

技术:迁移;存储和备份

AWS服务:亚马逊 S3

Summary

此模式描述如何使用克隆将数据从 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 examplebucket-01 2022-03-07 01:45:16 examplebucket-02 2022-03-07 02:12:07 examplebucket-03
  • 列出 S3 存储桶内的文件。

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

从容器迁移数据。

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

示例:复制

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

rclone copy AZStorageAccount:blob-container s3:examplebucket-01

示例:同步

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

rclone sync AZStorageAccount:blob-container s3:examplebucket-01

重要事项:使用 sync 命令时,源容器中不存在的数据将从目标 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:::BUCKET_NAME/*", "arn:aws:s3:::BUCKET_NAME" ] }, { "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}