Terraform と Datastream を使ってみる: Postgres データを BigQuery に複製する
Google Cloud Japan Team
※この投稿は米国時間 2023 年 2 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。
ある組織が、さまざまなデータベースやアプリケーションに保存されたデータを大量に蓄積しているとします。データ ストレージが複雑なため、分析レポートの作成に長い時間がかかります。そこでチームは、レポートの作成を効率化するために、すべてのデータを BigQuery に複製することに決めました。従来、これは完了までに長い時間がかかるであろう大規模で複雑、かつ費用のかかるプロジェクトでした。
それぞれのデータソースのレプリケーションを苦労して設定する代わりに、チームは Datastream と Terraform を使用できるようになりました。データソースのリストをコンパイルし、組織の設定に従っていくつかの構成ファイルを作成すれば完了です。レプリケーションが開始され、データは数分で BigQuery に表示され始めます。
Datastream は、Google Cloud のサーバーレスで簡単に使える、変更データ キャプチャおよびレプリケーション サービスです。Datastream に馴染みがない方は、こちらの投稿で概要をご確認いただくか、最新の Datastream for BigQuery のリリースのお知らせをご覧いただくことをおすすめします。
Terraform は、人気の高い Infrastructure as Code(IaC)ツールです。構成ファイルを使用してインフラストラクチャを管理できるため、管理の安全性と一貫性を確保できるだけでなく、簡単に自動化することができます。
2023 年 2 月中旬にリリースされた Datastream での Terraform サポートにより、次のような画期的なユースケースを実現して、簡素化できるようになりました。
ポリシーのコンプライアンス管理 - Terraform を使用して、チームがプロビジョニングするリソースに、コンプライアンスとガバナンスのポリシーを適用できます。
レプリケーション プロセスの自動化 - Terraform を使用して、Datastream のオペレーションを自動化できます。このユースケースは、自動レプリケーション、多数のデータソースのレプリケーション、または単一のデータソースから複数の宛先へのレプリケーションが必要な場合に役立ちます。
Terraform を使用して PostgreSQL から BigQuery への Datastream レプリケーションを設定する
データソースが PostgreSQL データベースである例を参照しながら、順を追って手順を確認していきましょう。
制限事項
Datastream がデータを複製するのは、Datastream と同じ Google Cloud プロジェクトで構成された BigQuery データ ウェアハウスのみであるため、データの取り込み先となるプロジェクト内に Datastream リソースを作成するようにします。
要件
作業を進める前に、プロジェクトで Datastream API を有効化する必要があります。Google Cloud コンソールの [API とサービス] ページに移動して、Datastream API が有効になっていることを確認します。
Terraform CLI がインストールされていることを確認します。詳しくは、Terraform CLI インストール ガイドをご覧ください。
このブログの手順は、MySQL または Oracle データベースでも実行できますが、若干の変更が必要になります。Postgres の構成セクションをスキップし、代わりに MySQL または Oracle の構成ガイドをご覧ください。
当然ながら、初期データを含む Postgres データベース インスタンスが必要です。新しい Postgres インスタンスを設定する場合は、Cloud SQL for Postgres クイックスタート ガイドの手順に従うことができます。
PostgreSQL が Datastream によるレプリケーションに対応するよう構成されていることを確認する必要があります。これには、論理レプリケーションを有効化することと、オプションとして Datastream 専用のユーザーを作成することが含まれます。詳しくは、PostgreSQL 構成ガイドをご覧ください。このステップのレプリケーション スロットとパブリケーション名は、後でレプリケーションを構成する際に必要となりますので、書き留めておくようにします。
また、データベースと Datastream 間の接続を設定する必要があります。ネットワーク接続オプション ガイドを確認し、設定に適した接続の種類を見つけます。
Terraform でレプリケーションを構成する
まず、ソースと宛先に接続するために必要な情報(ホスト名、ポート、ユーザーなど)を保存する Datastream の接続プロファイルを作成します。
そのために、空のディレクトリに新しい .tf ファイルを作成し、以下の構成を追加していきます。
この例では、Postgres インスタンスを指す新しい接続プロファイルを作成します。ソースの情報を使用して構成を編集し、保存します。他のソースや構成については、Datastream 接続プロファイルに関する Terraform のドキュメントをご覧ください。
次に、BigQuery の宛先のための接続プロファイルを定義しましょう。
これで、ソースと宛先が構成され、これらの間のレプリケーション プロセスを構成する準備が整いました。これを構成するには、ストリーム(ソースと宛先のレプリケーションを表す Datastream リソース)を定義します。
この構成では、新しいストリームを作成し、ソースと宛先の接続プロファイルとプロパティを構成します。ここで、注目すべき機能をいくつかご紹介します。
バックフィル(
backfill_all
)- Datastream が過去のデータの最初のスナップショットを複製します。これは、特定のテーブルを除外するように構成することも可能です。ソースのサブセットの複製 - 包含 / 除外リストを使用して、ストリームに含めるデータまたは除外するデータを指定できます。詳しくは、API ドキュメントをご覧ください。
初期設定で作成したソース Postgres のパブリケーションとレプリケーション スロットを使用して構成を編集します。他のソースや構成については、ストリームに関する Terraform のドキュメントをご覧ください。
Terraform 構成を実行する
構成の準備ができたので、Terraform CLI で実行してみましょう。そのためには、Terraform CLI がインストールされ、プロジェクトに必要な権限が構成されている Cloud Shell を使用できます。
また、.tf
ファイルに以下を追加することで、ローカル環境を準備することもできます。
まず、terraform init
コマンドを実行し、構成ディレクトリで Terraform を初期化します。次に、terraform plan
コマンドを実行して、構成の確認と検証を行います。


正常に処理されていれば、Datastream のストリームが実行されているはずです。Datastream コンソールに移動してストリームを管理し、BigQuery コンソールに移動して適切なデータセットが作成されたことを確認します。
確認が終わったら、terraform destroy
を使用して、作成した Datastream リソースを削除できます。
問題が発生した場合
Terraform CLI のデバッグログを表示するには、export TF_LOG=DEBUG
フラグを設定します。詳しくは、Terraform のデバッグをご覧ください。
複数のレプリケーションを自動化する
Terraform の構成を自動化するために、入力変数、count 引数、element 関数を使用できます。ソースリストを保持するための単純な変数は、次のようになります。自動化したいリソース(ソース、ストリーム、場合によって宛先)を count フィールドに追加します。変数の値を、以下のように置き換えます。
参考情報
- Google Cloud、ソフトウェア エンジニア Ido Peretz