VPC によるAmazon Redshift から BigQuery にデータ移行を試してみる

2020.05.15

はじめに

データアナリティクス事業本部のkobayashiです。

最近RedshiftのデータをGCPへ移行してBigQueryを扱いたいという要件がありその検証作業を行っていました。移行方法はGCPのドキュメントに詳しく説明が記載さてれいますのでその手順に従えば特に問題なく行えます。ただし、パブリックIPで接続できるRedshiftという条件下での話になります(ドキュメント内では「標準のAmazon Redshiftデータの移行」と呼ばれています)。

セキュリティ要件によりプライベートな環境に展開されていて外部からパブリックIPででアクセスを行えないRedshiftの場合での移行方法も「VPCによる Amazon Redshiftデータの移行」として公式ドキュメントがありますが、手順通りに進めてハマった箇所があリますので説明を加えつつまとめます。

VPCによるBigQueryへRedshiftデータの移行方法

「標準のAmazon Redshiftデータの移行」であるパブリックIPでRedshiftへアクセスできる場合には以下の公式ドキュメントの手順に従って設定を行うことでBigQuery Data Transfer Serviceを使用してRedshiftからBigQueryへデータを移行することができます。

Amazon Redshift からのデータ移行  |  BigQuery Data Transfer Service

「VPCによるAmazon Redshiftデータの移行」の方法も「標準のAmazon Redshiftデータの移行」と途中までは同じ手順を踏みますのでこのドキュメントに従って説明します。

前提条件

以下の環境はすでに整っているものとして進めます。

  • BigQueryにて移行データを保存するデータセットが作成されている
  • BigQuery Data Transfer Service API を有効にしてある
  • AWSとGCPのVPCネットワーク間でVPN接続が確立されている
  • S3に対する読み取り/書き込みアクセス権を持つAmazon IAMユーザーとキーペアを作成してある

AWSとGCPのVPCネットワーク間でVPN接続に関しては以前のエントリーで設定方法をまとめてありますのでそちらをご確認ください。

Amazon IAMユーザーについては、Amazon Redshiftのデータは一旦S3にUnloadされた後にBigQueryに転送されるためS3に読み込み/書き込み権限を持ったIAMユーザーが必要になります。

設定手順

設定は以下の順序で行います。

  1. GCPのクラウドルーターへ設定追加
  2. AWSでルートテーブルでルート伝播の確認
  3. BigQueryのコンソールで転送設定の作成

「VPCによるAmazon Redshiftデータの移行」ではBigQuery Data Transfer Serviceの設定を行う際に移行インフラストラクチャをプロビジョニングするためのプライベートIP範囲が必要になります。 これは任意のプライベートIPで良いのですが、

  • 10.x.x.xから始まる任意のプライベートIP範囲
  • 10個を超えるIPアドレスを持つIP範囲
  • AWS/GCPのVPCネットワークのサブネットと重複していないIP範囲

であることが条件となります。

今回の設定ではこのIPアドレス範囲を10.251.1.0/24として進めていきます。

GCP/AWSコンソールでの設定と確認

GCPクラウドルーターへの設定追加

移行インフラストラクチャとRedshiftが疎通を行う必要があるのでAWS側にBGPでこのルートをアドバタイズする必要があります。そのためGCPのクラウドルーターのBGPでアドバタイズするルートにこのIP範囲を追加します。

手順1).GCPの管理コンソールでハイブリッド接続 > クラウドルーターと進み、設定済みのクラウドルーターの選択し、編集をクリックします。

手順2).移行インフラストラクチャをプロビジョニングするためのIP範囲を追加します。

  • アドバタイズされたルート : カスタムルートの作成を選択
    • すべてのサブネットのアドバタイズ : Cloud Routerに表示されるすべてのサブネットにアドバタイズするをチェック
  • カスタム範囲 > 新しいカスタムルート
    • ソース : カスタム範囲を選択
    • IPアドレス範囲 : 移行インフラストラクチャをプロビジョンするIP範囲(今回の設定では10.251.1.0/24)を入力

これでクラウドルーターがBGPでアドバタイズするルートに移行インフラストラクチャをプロビジョンするIP範囲が追加されたので次にAWS側で伝播されているかを確認します。

AWSでルートテーブルの確認

手順3).VPCのルートテーブル > ルート伝播で追加したルートが伝播済みになっていることを確認します。

BigQuery Data Transfer Serviceの設定

手順4).BigQueryのコンソールにて転送メニューがあるのでクリックします。

手順5).画面上部の転送を作成をクリックします。

手順6).転送の作成画面に進むので、ソースタイプMigration: Redshiftを選択します。Migration: Redshift用の入力フィールドが表示されるので設定を行います。

  • 転送構成名 : わかりやすい名前を入力
  • 転送先の設定
    • データセットID : 先に作成したBigQueryのデータセット名を選択

  • データソースの詳細
    • JDBC connection url for Redshift : Amazon Redshift JDBCのURLを入力(詳しくはAWSのドキュメンJDBC URL を取得するを参照)
    • Username of your database : Redshiftへアクセスするユーザー名を入力
    • Password of your database : 上記ユーザーのパスワードを入力
    • Access key ID : 先に準備したS3への読み込み/書き込み権限を持つIAMユーザーのアクセスキー
    • Secret access key : 上記IAMユーザーのシークレットキー
    • Amazon S3 URI : RedshiftからUnloadしたファイルを保存すS3バケットのURI
    • Amazon Redshift Schema : Redshiftのスキーマ名
    • Table name patterns : 移行したいテーブルの指定がある場合は入力(複数テーブルの場合はセミコロン;区切りで入力)
    • VPC and reserved IP range : 移行インフラストラクチャをプロビジョニングするためのVPCネットワーク名とCIDR形式のIP範囲をコロン:で繋げて入力

VPC and reserved IP rangeは「VPCによるAmazon Redshiftデータの移行」の場合に必要な項目で、標準のAmazon Redshiftデータの移行でデータ移行を行う場合はこのフィールドは空欄にして後は保存すれば移行が始まります。VPCによるAmazon Redshiftデータの移行はこのフィールドにも値を入力する必要があります。

VPCネットワーク名にはAWSとVPN接続をしたGCPのVPCネットワーク名を入力します。またCIDR形式のIP範囲にはクラウドルーターで設定した移行インフラストラクチャをプロビジョンするIP範囲(今回の設定では10.251.1.0/24)を入力します。

この検証を始めた当初はコンソールのバグでVPC and reserved IP rangeフィールドが出ておらずGCPのサポートに問い合わせて解決してもらいました。ただフィールドが表示された後もVPCネットワーク名とIPの範囲がよく理解できずしばらく試行錯誤しました。

データ転送の実行

転送設定が終わると自動的に転送が始まります。

無事に転送が終わるとログに転送したテーブル数分のjobとステータスに転送実行が正常に終了しました。と表示されます。

BigQueryでクエリを実行すると無事にRedshiftのデータがBigQueryに転送されていることが確認できます。

まとめ

プライベートサブネットに構築されいるRedshiftからBigQueryへデータを転送してBigQueryなどGCPのリソースで分析をしたいという需要もあると思いまとめました。その様な環境でRedshiftからBigQueryへデータを転送も手順をしっかり踏めば問題なく移行できることがわかりました。

最後まで読んで頂いてありがとうございました。