コンテンツに移動
デベロッパー

Storage Transfer Service を使用して AWS から GCP にデータを転送する

2023年1月25日
Google Cloud Japan Team

※この投稿は米国時間 2023 年 1 月 14 日に、Google Cloud blog に投稿されたものの抄訳です。

概要

Storage Transfer Service を使用すれば、Google Cloud Storage や Amazon S3、Azure Blob Storage、オンプレミス データなどのオブジェクトおよびファイル ストレージ システム間で、データを迅速かつ安全に転送できます。

このブログでは、AWS S3 から Google の Cloud Storage に、ID 連携を使用して安全にデータを転送する手順を説明します。

ID 連携では、Google Cloud と AWS の間に信頼関係を作成します。有効期間の短いアクセス トークンを使用してリソースに直接アクセスでき、長期間有効な認証情報(サービス アカウント キーなど)に関連するメンテナンスとセキュリティの負担が軽減されます。ID 連携を使用する場合、Storage Transfer Service を使用していないときのキーのローテーションやキーの明示的な取り消しについて心配する必要がありません。

AWS S3 から GCS にデータを移動するストレージ転送ジョブを構成するための手順

このセクションでは、Amazon Web Services から Google Cloud に安全にデータを転送するためのインフラストラクチャの設定手順について説明します。

Google Cloud 上での構成

  • [API とサービス] で Storage Transfer API を有効にします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1._Enable_STS.max-800x800.png
  • 転送ジョブを構成する Google Cloud プロジェクトで Cloud Shell を開きます。

  • gcloud auth print-access-token を実行して、認証(次のステップで使用する署名なしトークン)を生成します。

  • Cloud Shell で以下のコマンドを実行して、サービス アカウントを生成します。

読み込んでいます...

プロジェクト番号、プロジェクト ID、トークンを置き換えます。

このコマンドの出力の形式は以下のようになります。

読み込んでいます...

注: subjectId をメモします。これは、AWS IAM ロールの信頼関係ポリシーで使用されます。

Amazon Web Services 上での構成

  • AWS IAM コンソールで、以下のように IAM ポリシーを作成します。

読み込んでいます...

注: このポリシーは、さらに単一の S3 バケットに制限できます。オブジェクトの場所を取得するには、s3:GetBucketLocation 権限が必要です。

  • ポリシーの作成後、[IAM roles] タブに移動して以下の手順を行います。

    • [Create role] を選択します。

    • [Web Identity] を選択します。

    • 「Google」を ID プロバイダとして選択し、オーディエンスを「accounts.google.com」とします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2._AWS_Web_Identity.max-2200x2200.png
  • 次のステップで、権限を追加するためにステップ 1 で作成した IAM ポリシーを選択します。

  • ロール名を更新してロールを作成します。

  • IAM ロール コンソールで、作成したロールを選択して [Trust relationships] タブをクリックします。

  • [Edit Trust Policy] をクリックして、以下を更新してから、ポリシーを更新します。

読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/3._Edit_Trust_Policy.max-1600x1600.png
  • Google Cloud に転送するオブジェクトを含む S3 バケットを AWS で作成します。

ストレージ転送ジョブの構成

  • Google Cloud プロジェクトで Storage Transfer Service(STS)に移動します。

  • [Create a transfer job] を選択します。

  • ソース - Amazon S3、宛先 - Google の Cloud Storage

  • 次のステップで、S3 バケットの名前と AWS IAM ロール ARN を入力します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4._Create_STS_transfer_job.max-1400x1400.png
  • 次に、Cloud Storage バケットを選択します。

  • 次に、ユースケースに最も適した設定を選択します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5._Scheduling_options.max-1100x1100.png
  • スケジュールを選択して STS ジョブを作成します。

  • S3 バケットのオブジェクトが GCS バケットにコピーされます。再度実行した場合、Storage Transfer Service が増分転送を実行するため、すでにコピーしたデータをスキップするようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/6._STS_run.max-1500x1500.png

Storage Transfer Service 用のカスタム スケジューラ

STS でサポートされている同期スケジュールの最小時間は 1 時間です。Cloud Functions から Cloud Scheduler をトリガーすることが、同期スケジュールを分単位 / カスタム スケジュールに短くするための回避手法です。

https://storage.googleapis.com/gweb-cloudblog-publish/images/0125ja.max-600x600.png

Cloud Storage 用のイベント ドリブン STS

Storage Transfer Service では、サーバーレスで簡単に使えるレプリケーション サービスであるイベント ドリブン転送を利用できます。STS で AWS や Google Cloud のイベント通知をリッスンして、ソースの場所で追加または更新されたデータを自動的に転送できます。AWS S3 または Cloud Storage から Cloud Storage へのイベント ドリブン転送がサポートされます。

この機能は、データソースの変更(新しいオブジェクトの挿入など)があり、数分で転送先に複製する必要がある場合に適しています。

AWS S3 から Google Cloud へのイベント ドリブンのレプリケーションをトリガーできるため、リアルタイムのデータ分析や機械学習でこれを利用できます。

Storage Transfer Service のイベント ドリブン構成:

https://storage.googleapis.com/gweb-cloudblog-publish/images/7._Event_driven_STS.max-800x800.png

以下の画像は、AWS S3 から Cloud Storage にイベント ドリブン STS を介して転送される新しいファイルを示しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/8._STS_event_driven_transfer.max-1700x1700.png

SQS 用に AWS イベント通知を有効化する

AWS S3 で以下を行います。

  • バケットの [Properties] タブに移動して、「Event Notification」を作成します。

  • [All Object Create Events] を選択します。

  • SQS ARN を更新します。

  • SQS と S3 の権限をストレージ転送ジョブで構成されている IAM ロールに追加します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/9._S3_event_notification.max-1400x1400.png
https://storage.googleapis.com/gweb-cloudblog-publish/images/Event_notification_high_res_1.max-800x800.png

設定が完了すると、構成済みの SQS キューに通知を配信できるように S3 バケットが有効化されます。また、この構成済みのロールは、イベント ドリブン転送のために SQS キューと S3 バケットの両方にアクセスできる必要があります。

AWS SQS で以下を行います。

  • イベント ドリブンの転送用の SQS キューを作成します。

  • [Access Policy] で、[Advance] を選択してから以下のサンプル ポリシーを追加します。これにより、メッセージを SQS キューに公開する権限が Amazon S3 に付与されます。

読み込んでいます...

注: SQS ARN、ソース アカウント番号、S3 バケット ARN を置き換えます。

  • SQS ARN をメモして、[Storage Transfer Service Event Driven] タブでこれを設定します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/11._S3_event_notification_config.max-1300x1300.png
  • ストレージ転送ジョブを作成して、オブジェクトが AWS S3 から GCS バケットに複製されるのを確認します。

 これで、Storage Transfer Service 用のイベント ドリブン設定は完了です。

まとめ

このブログでは、Storage Transfer Service を使用して AWS S3 から Google の Cloud Storage にデータを安全に転送する方法を説明しました。また、AWS のイベント通知をリッスンして、ソースの場所で追加または更新されたデータを自動的に転送するイベント ドリブン STS の機能についても説明しました。

さらに学習したい場合は、Storage Transfer Service のドキュメントをご覧ください

- Google Cloud クラウド インフラストラクチャ エンジニア Amrutha Singh

投稿先