

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Rclone 將資料從 Microsoft Azure Blob 遷移至 Amazon S3
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone"></a>

*Suhas Basavaraj、Acidian Keane 和 Corey Lane，Amazon Web Services*

## 總結
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-summary"></a>

此模式說明如何使用 [Rclone](https://rclone.org/) 將資料從 Microsoft Azure Blob 物件儲存遷移至 Amazon Simple Storage Service (Amazon S3) 儲存貯體。您可以使用此模式來執行一次性遷移或持續同步資料。Rclone 是以 Go 編寫的命令列程式，用於從雲端提供者跨各種儲存技術移動資料。

## 先決條件和限制
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 存放在 Azure Blob 容器服務中的資料

## Architecture
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-architecture"></a>

**來源技術堆疊**
+ Azure Blob 儲存容器

**目標技術堆疊**
+ Amazon S3 儲存貯體
+ Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體

**架構**

![將資料從 Microsoft Azure 遷移至 Amazon S3](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/6ead815d-7768-4726-b27d-97a70cd21081/images/abe69eee-632f-4ca2-abf6-3223f3f3ec94.png)


## 工具
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-tools"></a>
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一種雲端型物件儲存服務，可協助您儲存、保護和擷取任何數量的資料。
+ [Rclone](https://rclone.org/) 是以 **rsync** 為設計來源的開放原始碼命令列程式。它用於管理多個雲端儲存平台的檔案。

## 最佳實務
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-best-practices"></a>

當您將資料從 Azure 遷移至 Amazon S3 時，請注意這些考量，以避免不必要的成本或緩慢的傳輸速度：
+ 在與 Azure 儲存帳戶和 Blob 容器相同的地理區域中建立 AWS 基礎設施，例如 AWS 區域 `us-east-1`（維吉尼亞北部） 和 Azure 區域 `East US`。
+ 如果可能，請避免使用 NAT Gateway，因為它會同時產生輸入和輸出頻寬的資料傳輸費用。
+ 使用 [Amazon S3 的 VPC 閘道端點](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)來提高效能。
+ 考慮使用 AWS Graviton2 (ARM) 處理器型 EC2 執行個體，相較於 Intel x86 執行個體，成本更低且效能更高。Rclone 是高度跨編譯的，並提供預先編譯的 ARM 二進位檔。

## 史詩
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-epics"></a>

### 準備 AWS 和 Azure 雲端資源
<a name="prepare-aws-and-azure-cloud-resources"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 準備目的地 S3 儲存貯體。 | 在適當的 AWS 區域中[建立新的 S3 儲存貯](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)體，或選擇現有的儲存貯體做為您要遷移資料的目的地。 | AWS 管理員 | 
| 為 Amazon EC2 建立 IAM 執行個體角色。 | [為 Amazon EC2 建立新的 AWS Identity and Access Management (IAM) 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#working-with-iam-roles)。此角色可讓 EC2 執行個體寫入目的地 S3 儲存貯體。 | AWS 管理員 | 
| 將政策連接至 IAM 執行個體角色。 | 使用 IAM 主控台或 AWS Command Line Interface (AWS CLI) 為 EC2 執行個體角色建立內嵌政策，允許對目的地 S3 儲存貯體的寫入存取許可。如需範例政策，請參閱[其他資訊](#migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional)一節。 | AWS 管理員 | 
| 啟動 EC2 執行個體。 | 啟動設定為使用新建立 IAM 服務角色的 Amazon Linux EC2 執行個體。此執行個體也需要透過網際網路存取 Azure 公有 API 端點。 請考慮使用 [AWS Graviton 型 EC2 執行個體](https://docs.aws.amazon.com/compute-optimizer/latest/ug/graviton-recommendations.html)來降低成本。Rclone 提供 ARM 編譯的二進位檔。 | AWS 管理員 | 
| 建立 Azure AD 服務主體。 | 使用 Azure CLI 建立對來源 Azure Blob 儲存容器具有唯讀存取權的 Azure Active Directory (Azure AD) 服務主體。如需說明，請參閱[其他資訊](#migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional)一節。將這些登入資料存放在您的 EC2 執行個體上至位置 `~/azure-principal.json`。 | 雲端管理員，Azure | 

### 安裝和設定 Rclone
<a name="install-and-configure-rclone"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 下載並安裝 Rclone。 | 下載並安裝 Rclone 命令列程式。如需安裝說明，請參閱 [Rclone 安裝文件](https://rclone.org/install/)。 | 一般 AWS、雲端管理員 | 
| 設定 Rclone。 | 複製下列`rclone.conf`範例檔案。`AZStorageAccount` 將 取代為您的 Azure Storage 帳戶名稱，並將 `us-east-1`取代為您的 S3 儲存貯體所在的 AWS 區域。將此檔案儲存至 EC2 執行個體`~/.config/rclone/rclone.conf`上的 位置。<pre>[AZStorageAccount]<br />type = azureblob<br />account = AZStorageAccount<br />service_principal_file = azure-principal.json<br /><br />[s3]<br />type = s3<br />provider = AWS<br />env_auth = true<br />region = us-east-1</pre> | 一般 AWS、雲端管理員 | 
| 驗證 Rclone 組態。 | 若要確認 Rclone 已設定且許可正常運作，請確認 Rclone 可以剖析您的組態檔案，以及可存取 Azure Blob 容器和 S3 儲存貯體中的物件。如需驗證命令範例，請參閱下列內容。[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.html) | 一般 AWS、雲端管理員 | 

### 使用 Rclone 遷移資料
<a name="migrate-data-using-rclone"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 從容器遷移資料。 | 執行 Rclone [複製](https://rclone.org/commands/rclone_copy/)或[同步](https://rclone.org/commands/rclone_sync/)命令。 <br />**範例：複製**<br />此命令會將來源 Azure Blob 容器的資料複製到目的地 S3 儲存貯體。<pre>rclone copy AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1</pre><br />**範例：同步**<br />此命令會同步來源 Azure Blob 容器與目的地 S3 儲存貯體之間的資料。 ** **<pre>rclone sync AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1</pre>當您使用**同步**命令時，來源容器中不存在的資料將從目的地 S3 儲存貯體中刪除。 | 一般 AWS、雲端管理員 | 
| 同步您的容器。 | 初始複製完成後，請執行 Rclone **同步**命令以進行持續遷移，以便僅複製目的地 S3 儲存貯體中遺失的新檔案。 | 一般 AWS、雲端管理員 | 
| 確認資料已成功遷移。 | 若要檢查資料是否已成功複製到目的地 S3 儲存貯體，請執行 Rclone [lsd](https://rclone.org/commands/rclone_lsd/) 和 [ls](https://rclone.org/commands/rclone_ls/) 命令。 | 一般 AWS、雲端管理員 | 

## 相關資源
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-resources"></a>
+ [Amazon S3 使用者指南 ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)(AWS 文件）
+ [Amazon EC2 的 IAM 角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) (AWS 文件）
+ [建立 Microsoft Azure Blob 容器](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal) (Microsoft Azure 文件）
+ [Rclone 命令](https://rclone.org/commands/) (Rclone 文件）

## 其他資訊
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional"></a>

**EC2 執行個體的角色政策範例**

此政策可讓 EC2 執行個體讀取和寫入存取您帳戶中的特定儲存貯體。如果您的儲存貯體使用客戶受管金鑰進行伺服器端加密，則政策可能需要額外存取 AWS Key Management Service (AWS KMS)。

```
{
    "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 雲端帳戶入口網站，並在 PowerShell 中啟動 Cloud Shell，或在工作站上使用 Azure Command-Line Interface (CLI)。

1. 建立服務主體，並使用 Azure Blob 儲存體帳戶的[唯讀](https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-reader)存取權進行設定。將此命令的 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}
   ```