Amazon Web Services ブログ
AWS DataSync を使用して Google Cloud Storage から Amazon S3 にデータを移行する方法
このブログは 2022 年 5 月 25 日に Brian Choi (Senior Specialist Solutions Architect) によって執筆された内容を日本語化した物です。原文はこちらを参照して下さい。
企業は、あるクラウドプロバイダーから別のクラウドプロバイダーに大量のオブジェクトデータを移行する必要がある場合があります。このタイプの移行の理由としては、データ統合や、ワークロードの移行、ディザスタリカバリ、割引プログラムの終了などが考えられます。移行には通常、エンドツーエンドの暗号化や、変更を検出する機能、オブジェクトの検証、ネットワークの調整、監視、コストの最適化などが必要です。このようなソリューションの構築は時間とコストがかかり、拡張も困難です。さらに、パブリッククラウドプロバイダー間の移行では、データセンターのストレージデバイスに物理的にアクセスするなどのオプションが制限されます。
このブログでは、AWS DataSync を使用して Google Cloud Storage から Amazon Simple Storage Service(S3)にオブジェクトデータを移行する方法を説明します。まずは AWS DataSync の概要から始め、このユースケースのための特定機能を解説します。次に、DataSync を Amazon S3 に設定する手順を説明します。
AWS DataSync の概要
AWS DataSync は、AWS Storage サービス間、AWS Storage と Google Cloud Storage 間、AWS Storage と Microsoft Azure Files 間のデータ移動を簡素化し、自動化、高速化するデータ移動サービスです。AWS DataSync の機能には、データの暗号化や、検証、監視、タスクスケジューリング、監査、スケーリングなどが含まれます。
特に Google Cloud Storage については、AWS DataSync は Google Storage XML API を使った組み込みの統合機能を搭載しています。これは、アプリケーションが Google Cloud Storage オブジェクトをプログラム的に管理できるようにする RESTful なインターフェースです。DataSync は、ハッシュベースのメッセージ認証コード(HMAC)キーを使用して、Google Storage XML API に接続します。Google Cloud Platform(GCP)の HMAC キーには、Google Cloud Storage バケットオブジェクトにアクセスするために適切なロールで構成できるアクセスIDと、シークレットが含まれています。AWS DataSync を使用すると、Google Cloud Storage からデータを移行するためにカスタムコードをプログラミングする必要がなく、DataSync のすべての機能を利用できます。
AWS DataSync のコンポーネントと用語解説
DataSync には、データ移動のために、タスクと、ロケーション、エージェント、タスク実行の4つのコンポーネントがあります。図1にコンポーネントの関係とチュートリアルで使用する属性を示します。
図1:AWS DataSync の4つの主要なコンポーネント
- エージェント:自己管理された場所からデータを読み取ったり、データを書き込んだりする仮想マシン(VM)。このチュートリアルでは、DataSync エージェントは、Amazon VPC 内で実行されているAmazon EC2 インスタンスにマッピングされています。
- ロケーション:データ移行の送信元と送信先のロケーション。このチュートリアルでは、送信元のロケーションは Google Storage XML API(https://storage.googleapis.com)を指すオブジェクトストレージで、特定の Google Storage バケット名が指定されています。送信先のロケーションは、Amazon S3 バケットです。
- タスク:タスクはデータの移動方法を定義する構成を持つ、1つの送信元と1つの送信先ロケーションで構成されます。タスクは常に送信元から送信先にデータを移動します。構成には、対象パターンや除外パターン、タスクスケジュール、帯域幅の制限などのオプションが含まれることがあります。
- タスク実行:開始時間や、終了時間、書き込みバイト数、ステータスなどの情報が含まれます。
AWS DataSync で Google Cloud Storage から Amazon S3 へデータを移行する方法
このチュートリアルでは、AWS DataSync を設定して、Google Cloud Storage から Amazon S3 へオブジェクトを移行する手順を説明します。図2では、単一の DataSync エージェントを使用した DataSync の基本的なアーキテクチャを記載しています。送信元のオブジェクトは Google Cloud Storage バケットに存在しています。送信先は Amazon S3 バケットです。
図2:単一の AWS DataSync エージェントアーキテクチャ
DataSync は、DataSync エージェントを始めとするいくつかのコンポーネントで構成されています。このアーキテクチャでは、エージェントは Amazon Elastic Compute Cloud(Amazon EC2)インスタンスとして、Amazon Virtual Private Cloud(Amazon VPC)内のサブネットにデプロイされます。このサブネットには DataSync の VPC エンドポイントがあり、DataSync エージェントから Amazon S3 へのトラフィックをプライベートに流すことができます。DataSync エージェントは、HMAC キーを使用してパブリックインターネット経由で GCP の Cloud Storage に接続します。
チュートリアルの前提条件
このチュートリアルでは、以下の前提条件を満たしている必要があります。
- AWS アカウント
- AWS Command Line Interface(CLI)
- Google Cloud Platform の Cloud Storage バケットと転送する移行元オブジェクト
移行元の概要:Google Cloud Storage バケット
このチュートリアルでは、demo-customer-bucket という名前の Google Cloud Storage バケットを移行元として用意しています。ストレージバケットを作成し、バケットにオブジェクトをアップロードします。このバケットには、business-data と system-data の2つのフォルダがあります。このユースケースでは、business-data フォルダ内のオブジェクトのみを移行し、system-data フォルダは移行の対象外とします。これは、DataSync が移行元バケットの対象フォルダを含めたり、除外したりできる機能を示すためです。
図3:移行元の Google Cloud Storage バケット
business-data フォルダ内には、6つのファイルがあります。本チュートリアルでは log.tmp という名前の一時ファイルを除外して、5つのテキストファイルを移行することを目標とします。これは、DataSync が名前のパターンに基づいて特定のオブジェクトを除外する機能を示すためです。
図4:移行元の Google Cloud Storage バケットオブジェクト
ウォークスルー
AWS DataSync を使用して Google Cloud Storage から Amazon S3 へデータを移行するソリューションを構築する準備が整いました。以下はおおまかな手順の概要です。
- Google Cloud Platform の HMAC キー作成
- 移行先の Amazon S3 バケット作成
- Amazon S3 バケットにアクセスするための IAM ロール作成
- Amazon VPC のネットワーク設定
- Amazon EC2 として DataSync エージェントをデプロイ
- DataSync のロケーション作成
- Google Cloud Storage:送信元
- Amazon S3:送信先
- DataSync タスクの作成と実行
- DataSync タスクの作成:ロケーション
- DataSync タスクの作成:設定
- DataSync タスクの実行
- 移行データの確認
ステップ1:GCP HMAC キー作成
DataSync エージェントは、HMAC クレデンシャルを使用して Google Cloud Platform に対して認証を行い、Cloud Storage バケット内のオブジェクトを管理します。これには、サービスアカウント用のキーを作成する必要があります。「サービスアカウントの HMAC キーの管理」の説明に従ってください。完了したら、アクセス ID とシークレットを取得します。この情報は安全な場所に保管してください。
サービス アカウントのプリンシパルには、DataSync エージェントが接続し、オブジェクトを移行するための十分な権限が必要です。この権限を付与する方法として、ストレージオブジェクト閲覧者という名前の事前定義されたロールを、サービスアカウントプリンシパルに付与することができます。
図5:Google Cloud Storage のロール権限
このロールのアクセスをさらに制限するには、リソース名が projects/_/buckets/demo-customer-bucket で始まる場合のみ許可する条件を追加します(demo-customer-bucket は移行元バケット名です)。この条件では、「で始まる(starts with)」を使用していることに注意してください。これにより、バケットとバケット内のオブジェクトに対するアクセス許可を1つのステートメントで付与できます。
Common Expression Language (CEL) 表現:
resource.name.startsWith(“projects/_/buckets/demo-customer-bucket”)
図6:Google Cloud Storage ロールパーミッション条件
ステップ2:移行先の Amazon S3 バケット作成
DataSync の送信先として使用する Amazon S3 バケットを新規に作成します。送信先バケットを作成後、バケットの「プロパティ」タブからバケットの Amazon Resource Name(ARN)を取得します。
図7:Amazon S3 バケットの Amazon Resource Name
ステップ3:Amazon S3 バケットにアクセスするための IAM ロール作成
AWS DataSync は、送信先バケットにデータを移行するために、Amazon S3 バケットにアクセスする必要があります。このため、DataSync は適切な許可と信頼関係を持つ IAM ロールを引き受ける必要があります。新しいロールを作成し、DataSync に Amazon S3 バケットへの読み取りと書き込みを許可するポリシーをアタッチします。
ステップ4:Amazon VPC エンドポイント用のネットワークをセットアップ
VPC エンドポイントを使用する際のネットワーク要件に基づいて、VPC とサブネット、ルートテーブル、セキュリティグループを作成します。 次に、DataSync のインターフェースエンドポイントを作成します。このエンドポイントを使用すると、エージェントと DataSync サービス間の接続は、パブリックインターネットを経由せず、パブリックIPアドレスも必要ありません。
ステップ5:Amazon EC2 として DataSync エージェントをデプロイ
次に、エージェントを Amazon EC2 インスタンスとしてデプロイします。Amazon EC2 インスタンスは、前のステップで作成したエージェントのセキュリティグループを使用し、サブネットへ最新の DataSync Amazon マシンイメージ (AMI)を使用して起動します。Amazon EC2 インスタンスが起動したら、VPC エンドポイントを使用して DataSync エージェントコンポーネントを作成します。最後に、エージェントをアクティベートして AWS アカウントに関連付けます。
ステップ6:DataSync のロケーション作成
以下の手順で、DataSync の送信元と送信先のロケーションを作成します。
Google Cloud Storage のロケーション(送信元)
- AWS DataSync コンソールを開き「ロケーション」を選択します。次に、「ロケーションを作成する」を選択します。
- 「ロケーションタイプ」は「オブジェクトストレージ」を選択します。
- 「エージェント」には、前のステップでアクティベートしたエージェントを選択します。
- 「サーバー」には、「storage.googleapis.com」を入力します。
- 「バケット名」には、Google Cloud Storage の移行元バケット名を入力します。このチュートリアルでは「demo-customer-bucket」とします。バケット名は大文字と小文字が区別されることに注意してください。
- 認証には、「ステップ1:GCP HMAC キー作成」で取得した Google HMAC キーのアクセス ID とシークレットを入力します。
- 「ロケーションを作成する」を選択します。
図8:DataSync 送信元ロケーション:Google Cloud Storage
Amazon S3 のロケーション(送信先)
- AWS DataSync コンソールを開き「ロケーション」を選択します。次に、「ロケーションを作成する」を選択します。
- 「ロケーションタイプ」は「 Simple Storage Service (Amazon S3) 」を選択します。
- 「S3 バケット」には「ステップ2:移行先の Amazon S3 バケット作成」で作成した送信先 Amazon S3 バケットを選択します。
- 「IAM ロール」には「ステップ3:Amazon S3 バケットにアクセスするための IAM ロール作成」で作成した IAM ロールを選択します。
- 「ロケーションを作成する」を選択します。
図9:DataSync 送信先ロケーション:Amazon S3
ステップ7:AWS DataSync タスクの作成と実行
AWS DataSync タスクを作成します。以下の手順に従って、送信元と送信先ロケーションの設定からタスクを作成します。
AWS DataSync タスクの作成:ロケーション
- AWS DataSync コンソールを開き「タスク」を選択し、「タスクを作成する」を選択します。
- 「送信元のロケーションのオプション」で「既存のロケーションを選択する」を選択します。「既存のロケーション」に「ステップ6:DataSync のロケーション作成」の object-storage://storage.googleapis.com/<bucket name>/ を選択し、「次へ」を選択します。
- 「送信先のロケーションのオプション」で「既存のロケーションを選択する」を選択します。「既存のロケーション」に「ステップ6:DataSync のロケーション作成」の s3://<bucket name>/ を選択し、「次へ」を選択します。「設定を構成する」ページが開きます。
DataSync タスクの作成:設定を構成する
以下の手順を実施して、DataSync タスクの設定を行います。
- 「タスク名」 にタスクの名前を入力します。
- 「データ転送設定」にて「特定のファイルとフォルダ」オプションを選択し、対象パターンを使用してサブフォルダを指定します。
- 「転送モード」には「変更されたデータのみを転送する」を選択します。
- 「削除されたファイルを保持する」のチェックボックスをオフにします。このオプションをオフにすると、Google Cloud Storage バケットで送信元のオブジェクトが削除された場合に、タスクは Amazon S3 バケット内の対応するオブジェクトを削除するので注意してください。本チュートリアルでは、送信元バケットがライブデータセットであると仮定しているため、送信元と Amazon S3 の同期を維持しています。
- 「ファイルを上書きする」のチェックボックスをチェックします。タスクが送信元と送信先のオブジェクトが異なることを検出した場合に、Amazon S3 内の送信先オブジェクトが上書きされることを意味します。このオプションは、Amazon S3 を送信元バケットと同期させるために必要な設定です。
- 「対象パターン」には「/business-data/*」を入力します。対象パターンを使用すると、移行するオブジェクトを特定のパスでフィルタリングすることができます。パターンは大文字と小文字が区別されることに注意してください。
- 「除外パターン」にて「パターンを追加する」を選択します。パターンには「*.tmp」を入力します。除外パターンを使用すると、タスクは .tmp の拡張子のオブジェクトを移行対象から除外します。パターンは大文字と小文字が区別されることに注意してください。
- 「追加の設定」を展開し「オブジェクトタグをコピーする」のチェックをオフにします。これにより、サポートされていない GCS 上のタグを読み取ることを防ぎます。
- 「タスクのログ記録」で、DataSync が CloudWatch Logs に詳細ログを出力するよう設定します。「ログレベル」で「転送されたすべてのオブジェクトとファイルをログに記録する」を選択します。本チュートリアルではファイル数は少なめですが、ファイル数が大量にある場合は、CloudWatch に関するコストを考慮し、要件にあったログレベルを選択してください。詳細は DataSync のモニタリングを参照してください。
- 「CloudWatch Log グループ」には「自動生成する」を選択します。これにより、適切なポリシーと CloudWatch Log グループが作成されます。そして「次へ」を選択します。レビューページが表示されますので、設定したタスクの構成が正しいか確認をしてください。
- 「タスクを作成する」を選択肢、タスクのステータスが利用可能になるのを待ちます。
図10:DataSync タスク設定の構成
AWS DataSync タスクの実行
最後に、DataSync タスクをスタートしてファイルを移行します。タスクのステータスは、タスクが各フェーズを通過するたびに更新されます。タスク実行時の各ステータス(フェーズ)と意味については、タスク実行ステータスを参照してください。また、Amazon CloudWatch を使用して DataSync をモニタリングすることもできます。
ステップ8:移行データの確認
Google Cloud Storage から Amazon S3 バケットに移行されたオブジェクトを確認することができます。Amazon S3 の送信先バケットに移動し、business-data フォルダを開いてください。5つのファイルが Amazon S3 バケットに移行されているはずです。また、log.tmp ファイルが移行されていないことにも注意してください。タスクの除外パターンで「*.tmp」を設定しているため、このログファイルが転送から除外されるためです。
タスクは複数回実行することができます。タスクが実行されるたびに、AWS DataSync は送信元と送信先間の変更を検出し、新規または変更されたオブジェクトのみを送信します。これにより、送信元で変更されたデータを転送することができます。
図11:送信元から送信先へ移行されたオブジェクト
DataSync は、オブジェクトのカスタムメタデータも転送します。このチュートリアルでは、file-1.txt ファイルに値は Math である Department というカスタムメタデータがあり、Amazon S3 のメタデータに移行されていることが確認できます。
図12:送信元から送信先へ移行されたオブジェクトのメタデータ
クリーンアップ
今後の課金を避けるため、このチュートリアルで使用したリソースを削除してください。
- GCP HMAC キーを非アクティブし、GCP HMAC キーと Google Cloud Storage バケットを削除します。
- DataSync タスク、ロケーション、エージェントの順に削除します。
- EC2 インスタンスを終了します。
- VPC エンドポイントを削除します。
- Amazon S3 バケットを削除します。
まとめ
このブログ記事では、AWS DataSync を構成して Google Cloud Storage バケットから Amazon S3 バケットにオブジェクトを移行する手順を説明しました。また、AWS の機能を使って、移行元バケットの特定フォルダやオブジェクトを対象にし、一部を除外するチュートリアルをお見せしました。
AWS DataSync を使用することで、Google Cloud Platform から Amazon S3 への大量データを移行する作業を簡素化することができます。AWS DataSync には、Google Storage XML API を通じて、HMAC キーで Google Cloud Storage に接続できる機能が組み込まれています。この記事で取り上げたソリューションでは、タスクを複数回実行して移行元データセットの変更を取り込む機能など、DataSync の機能を利用することができます。
AWS DataSync を使用する場合は、以下のリソースが参考になりますので、是非ご利用ください。
- AWS DataSync の新機能
- AWS DataSync ユーザーガイド
- AWS re:Post
- AWS DataSync Primer ※ 無料でオンデマンドで受講可能な 1 時間のセルフベースのオンラインコース
AWS DataSync を使用した Google Cloud Storage から Amazon S3 への移行について、本ブログ記事をお読みいただきありがとうございました。ぜひこのソリューションを試してみてください。
翻訳はプロフェッショナルサービス本部の葉山が担当しました。