Datastreamを使ってみた

Google Cloud
この記事は約6分で読めます。

こんにちは!長畑です

先日Google Cloud Platformにて、Datastreamが正式版としてGAされました。
以前よりベータ版として公開はされていましたが、正式版リリースを機に動作検証を行いました。

概要

Datastreamは既存データベース⇒BigQuery間でのデータ転送を簡単な手順で実現できてしまうサービスです。

DB間のデータ転送をフルスクラッチする場合、検討する課題も多くそれなりに時間と費用とかけて開発を行い、安定稼働するまで監視、改善、チューニングといったことを続ける必要があります。
Datastreamはそういった問題を一気に解決してくれるサービスです。

検証

検証手順

1.AWSにRDSとEC2を準備します。

2.BigQueryにデータセットを作成します。

2.Datastreamの設定を行います。

3.AWSのRDSにデータを登録してBigQueryにデータ転送されるか検証します。

全体図

まず今回検証する全体像ですが、次の構成としています。AWS上にRDSとEC2を構築。EC2は踏み台サーバとします。RDSはPostgreSQLを選択しています。
SSHポートフォワーディングで踏み台サーバ経由でRDSに接続するような形としています。

BigQueryの事前準備

BigQueryにデータセットも用意しておきます。
今回はdatastream_testというデータセットを作成しました。

データセット
AWS PostgreSQLの事前準備

レプリケーションを利用する場合、PostgreSQLのログレベルが’logical’に設定されている必要があります。以下のSQLで確認します。

SELECT name, setting FROM pg_settings WHERE name='wal_level';

‘logical’でなければ、パラメータグループから設定をwal_levelをlogicalに変更してデータベースの再起動を行います。

wal_sender_timeoutは、10分以上が推奨されています。無効にする場合は0分を指定します。
こちらは再起動は不要です。

ストリームの設定中にもガイドが現れますが、レプリケーションスロット、パブリケーション名、ストリーミング対象となるテーブルを設定します。
こちらは公式ドキュメントをリンクします。
レプリケーションスロット、パブリケーション名はストリームの設定で必要となります。

テーブルを作成して、適当なデータを入れておきます。

テストテーブル
接続方法について

接続方法は以下の3つがあります。それぞれメリット・デメリットがあります。
今回は設定の楽さ、比較的安全なSSHポートフォワードで接続したいと思います。

接続方法メリットデメリット
VPNピアリング安全なプライベート接続DBとGCP間でプライベート接続が必要となる。
SSHポートフォワード安全
踏み台サーバが必要となる。
IP許可リスト構成が容易DBがパブリックに公開されてしまう。
暗号化されない。など。

Datastreamの設定

接続プロファイルの設定

始めに転送元のデータベースへの接続情報を入力します。
接続プロファイルより、プロファイルの作成を選択します。

プロファイル作成

サポートされているデータベースを選択することが可能です。
ここではPostgreSQLを選択します。

サポートデータベース選択

接続先の情報を登録します。
まずはデータベースへの接続情報を登録します。

接続プロファイルDB情報登録

次に踏み台サーバの設定です。
フォワードSSHトンネルを選択し、踏み台サーバへの接続情報を登録します。

接続プロファイル踏み台サーバ

認証方法としては、公開鍵/秘密鍵のペアかパスワード認証がありますが、
パスワード認証だとエラーで接続できなかったため秘密鍵で接続しました。
※ サポートに問い合わせたところ、エラーになるとのこと。修正に期待しましょう。

※AWS側のセキュリティグループにGCPのリージョンのIPを登録しておく必要があります。

接続テストテスト成功であれば作成ボタンを押下して接続プロファイルを作成しましょう。

作成が終わると接続プロファイル一覧に表示されます。この段階ではストリームと紐づけていない為、アクティビティに0個のストリームと表示されます。

接続プロファイル作成後
ストリームの作成

ストリームを作成します。必要な情報を入力します。
ソースタイプに今回連携するPostgreSQLを選択、宛先はBigQueryとします。

ストリームの定義

接続プロファイルを設定します。前項で設定した接続プロファイルを選択します。

PostgreSQLの前提条件

転送の設定を行います。
レプリケーションスロット、パプリケーション名の設定、転送元のテーブルの選択を行います。

レプリケーションテーブル選択

BigQueryの接続プロファイルの定義を行います。新規作成の場合は妥当な名前を登録します。

BigQuery接続プロファイルの定義

転送先のデータセットを選択します。

データセット選択

作成と開始ボタンを押下します。
しばらく待つとバックフィルが開始されBigQueryにテーブルが自動的に作成され、ストリームが開始します。

ストリーム開始中
ストリーム開始

BigQueryの対象のデータセットにテーブルが作成されています。

ストリーム開始後のデータセット

テーブルの中身を見るとデータが連携されていることがわかります。

データ連携

データ転送確認

インサート

インサートしたデータが転送されるかの確認です。
BigQueryは3件存在しています。

レプリケーション元テーブルに1件インサートして、少し待ちます。

するとBigQuery側にデータが反映されています。

アップデート

次にアップデートしたデータが転送されるかの確認です。

データをアップデートして、少し待ちます。

アップデートした箇所が反映されていることがわかります。

デリート

次にデリートです。

同じように削除して、少し待ちます。

データが削除されていることがわかります。

価格体系

Datastream for BigQueryはデータの連携量によって料金が変動します。
また2つの手段によりデータ転送を行っています。
バックフィル:転送元のスナップショットを取込みます。
CDC    :転送元の変更をリアルタイムでキャプチャします。

項目費用(GBあたり)備考
CDC 0-2.5 TB/month$2.568
CDC 2.5-5 TB/month$1.926
CDC 5-10 TB/month$1.541
CDC 10+ TB/month$1.027
バックフィル$0.514500GBまで無料
※2023年7月時点の料金となっています。選択リージョンに拠り価格も変動するため、詳しくはこちらを参照してください。

仮にテーブルサイズが800GBで、データの更新で仮に2倍の更新量があるとして約400GBのデータ連携量があったと想定した際の料金は以下です。
バックフィル料金:(800GB – 500GB) * $0.514 = $154.2
CDC料金    :400GB * $2.568 = $1027.2
合計: $154.2 + $1027.2 = $1181.4 (約170,994円)※円換算は変動します。

まとめ

この記事では、正式リリースされたDatastreamの動作を確認しました。簡易な操作でデータ連携が可能になります。他にも料金はイニシャルコストは不要かつランニングコストだけと考えた場合、安価にデータ転送の機能を実現できるため、このサービスは非常に魅力的と言えるのではないでしょうか。

Google および Google Cloud Platform™ service は Google LLC の商標であり、この記事は Google によって承認されたり、Google と提携したりするものではありません。

コメント

タイトルとURLをコピーしました