Rclone を使用して Microsoft Azure Blob から Amazon S3 にデータを移行する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Rclone を使用して Microsoft Azure Blob から Amazon S3 にデータを移行する

作成者: Suhas Basavaraj (AWS)、Aidan Keane (AWS)、Corey Lane (AWS)

概要

このパターンでは、Rclone を使用して Microsoft Azure Blob オブジェクトストレージから Amazon Simple Storage Service (Amazon S3) バケットにデータを移行する方法を説明します。このパターンを使用すると、1 回限りの移行や継続的なデータの同期を行うことができます。Rclone は Go で記述されたコマンドラインプログラムです。クラウドプロバイダーのさまざまなストレージテクノロジー間でデータを移動するために使用されます。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • Azure Blob コンテナサービスに保存されているデータ

アーキテクチャ

ソーステクノロジースタック

  • Azure Blob ストレージコンテナ

ターゲットテクノロジースタック

  • Amazon S3 バケット

  • Amazon Elastic Compute Cloud (Amazon EC2) インスタンス

アーキテクチャ

Microsoft Azure から Amazon S3 へのデータ移行

ツール

  • Amazon Simple Storage Service (Amazon S3) は、量にかかわらず、データを保存、保護、取得するのに役立つクラウドベースのオブジェクトストレージサービスです。

  • Rclone は、rsync にインスパイアされたオープンソースのコマンドラインプログラムです。多くのクラウドストレージプラットフォームで、ファイルを管理するために使用できます。

ベストプラクティス

Azure から Amazon S3 にデータを移行する場合、不必要なコストや転送速度の低下を避けるため、以下の事項に注意してください。

  • AWS インフラストラクチャは、AWS リージョン us-east-1 (北バージニア)や Azure リージョン East US など、Azure ストレージアカウントや Blob コンテナと同じ地域に作成します。

  • NAT ゲートウェイは、入口帯域幅と出口帯域幅の両方でデータ転送コストが発生するため、可能な限り使用しないでください。

  • Amazon S3 用の VPC ゲートウェイエンドポイント を使用すると、パフォーマンスが向上します。

  • Intel x86 インスタンスよりも低コストで高いパフォーマンスを実現するためには、AWS Graviton2 (ARM) プロセッサベースの EC2 インスタンスの使用を検討してください。Rcloneは 何度もクロスコンパイルされており、プリコンパイルされた ARM バイナリを提供します。

エピック

タスク説明必要なスキル

送信先の S3 バケットを準備します。

適切な AWS リージョンに新しい S3 バケットを作成するか、移行するデータの宛先として既存のバケットを選択します。

AWS 管理者

Amazon EC2 用の IAM インスタンスロールを作成します。

Amazon EC2 用の新しい AWS Identity and Access Management (IAM) ロールを作成します。このロールは、送信先の S3 バケットへの書き込みアクセス権を EC2 インスタンスに与えます。

AWS 管理者

IAM インスタンスロールをポリシーにアタッチする

IAM コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、送信先の S3 バケットへの書き込みアクセスを許可する EC2インスタンスロールのインラインポリシーを作成します。ポリシーの例については、「追加情報」セクションを参照してください。

AWS 管理者

EC2 インスタンスを起動します。

新しく作成した IAM サービスロールを使用するように設定された Amazon Linux EC2 インスタンスを起動します。このインスタンスは、インターネット経由で Azure パブリック API エンドポイントにアクセスする必要があります。 

注記

AWS Graviton ベースの EC2 インスタンスを使用してコストを削減することを検討してください。Rclone は ARM がコンパイルされたバイナリを提供します。

AWS 管理者

Azure AD サービスプリンシパルを作成します。

Azure CLI を使用して、ソース Azure Blob ストレージコンテナへの読み取り専用アクセス権がある Azure Active Directory (Azure AD) サービスプリンシパルを作成します。手順については、「追加情報」セクションを参照してください。これらの認証情報を EC2 インスタンス上の場所 ~/azure-principal.json に格納します。

クラウド管理者
タスク説明必要なスキル

Rclone をダウンロードしてインストールします。

Rclone コマンドラインプログラムをダウンロードしてインストールします。インストール手順については、Rclone インストールのドキュメントを参照してください。

AWS 全般、クラウド管理者

Rclone を設定します。

次の rclone.conf サンプルファイルをコピーします。AZStorageAccount を Azure Storage アカウント名に置き換え、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 コンテナを一覧表示します。AZStorageAccountrclone.conf ファイルで使用したストレージアカウント名に置き換えます。

    rclone lsd AZStorageAccount: 2020-04-29 08:29:26 docs
  • Azure Blob コンテナ内のファイルを一覧表示します。このコマンドのドキュメントを、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 同期コマンドを実行して継続的な移行を実行し、移行先の S3 バケットにない新規ファイルのみをコピーします。

AWS 全般、クラウド管理者

データが正常に移行されたことを確認します。

データが移行先の S3 バケットに正常にコピーされたことを確認するには、Rclone lsd コマンドと ls コマンドを実行します。

AWS 全般、クラウド管理者

関連リソース

追加情報

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 リソースにアクセスするためのセキュリティ ID です。これは、特定のロールを持ち、リソースへのアクセスが厳密に制御されているユーザー ID (ログイン名とパスワードまたは証明書) と考えることができます。最小特権の権限に従い、Azure 内のデータを誤って削除されないように保護する読み取り専用のサービスプリンシパルを作成するには、次の手順に従います。

  1. Microsoft Azure クラウドアカウントポータルにログインし、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}