以降のセクションでは、AlloyDB for PostgreSQL データベースの構成方法について説明します。
Datastream と AlloyDB 間の接続を設定する
Datastream が AlloyDB インスタンスに接続できるようにするには、コンシューマ プロジェクトで TCP プロキシを設定する必要があります。TCP プロキシ イメージは、すべてのお客様に一般公開されています。
プロキシ コンテナの起動:
- ユーザー プロジェクトで Cloud Shell を有効にします。
- 次のスクリプトを実行して TCP プロキシを作成し、ブリッジ ネットワーキングを無効にして接続の問題を回避します。
gcloud compute instances create-with-container \ --zone=REGION_ID VM_NAME \ --container-image gcr.io/dms-images/tcp-proxy \ --tags=dms-tcp-proxy \ --container-env=SOURCE_CONFIG=ALLOYDB_IP:ALLOYDB_PORT \ --can-ip-forward \ --network=SOURCE_AND_DEST_VPC \ --machine-type=VM_TIER \ --metadata=startup-script='#! /bin/bash mkdir -p /etc/docker cat <<EOF > /etc/docker/daemon.json {"bridge":"none"} EOF systemctl restart docker'
以下を置き換えます。
- REGION_ID: TCP プロキシを作成するリージョン。
- VM_NAME: 仮想マシンの名前。
- ALLOYDB_IP: AlloyDB for PostgreSQL インスタンスの IP アドレス。
- ALLOYDB_PORT: AlloyDB for PostgreSQL インスタンスのポート番号。
- SOURCE_AND_DEST_VPC: 送信元と宛先が接続されている VPC ネットワーク。
- VM_TIER: 仮想マシンのタイプ。
更新後のパラメータを含んだコマンドの例:
gcloud compute instances create-with-container \ --zone=us-central1-c ds-tcp-proxy \ --container-image gcr.io/dms-images/tcp-proxy \ --tags=ds-tcp-proxy \ --container-env=SOURCE_CONFIG=10.16.0.5:5432 \ --can-ip-forward \ --network=default \ --machine-type=e2-micro --metadata=startup-script='#! /bin/bash mkdir -p /etc/docker cat <<EOF > /etc/docker/daemon.json {"bridge":"none"} EOF systemctl restart docker'
以下の入力を使用してスクリプトを実行し、TCP プロキシの IP アドレスを出力します。
gcloud compute instances describe VM_NAME \ --format="yaml(networkInterfaces[].networkIP)" \ --zone=REGION_ID
以下を置き換えます。
- VM_NAME: 仮想マシンの名前。
- REGION_ID: TCP プロキシを作成したリージョン。
(省略可)TCP プロキシへの上り(内向き)トラフィックを制限するファイアウォール ルールを作成します。
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --target-tags=dms-tcp-proxy \ --network=SOURCE_VPC \ --action=ALLOW \ --rules=tcp:ALLOYDB_PORT \ --source-ranges=IP_RANGE
以下を置き換えます。
- FIREWALL_RULE_NAME: ファイアウォール ルールの名前
- SOURCE_VPC: ソースが接続されている VPC ネットワーク。
- ALLOYDB_PORT: AlloyDB for PostgreSQL インスタンスのポート番号。
- IP_RANGE: 上り(内向き)トラフィックを制限する IP アドレス範囲。
すべての IP アドレスからの上り(内向き)トラフィックを許可するコマンドの例:
gcloud compute firewall-rules create ds-proxy1 \ --direction=INGRESS \ --priority=1000 \ --target-tags=ds-tcp-proxy \ --network=default \ --action=ALLOW \ --rules=tcp:5432
レプリケーション用に AlloyDB を構成する
AlloyDB プライマリ インスタンスの論理デコードを有効にします。Google Cloud で
alloydb.logical_decoding
フラグの値を [ON] に設定します。データベース フラグの更新については、インスタンスのデータベース フラグを構成するをご覧ください。同じ VPC 上の任意の VM から次のコマンドを実行し、TCP プロキシ IP アドレスを使用して AlloyDB インスタンスに接続します。
psql -h PROXY_IP \ -U DB_USER \ -d DB_NAME
以下を置き換えます。
- PROXY_IP: TCP プロキシの IP アドレス。
- DB_USER: AlloyDB データベースのユーザー名。
- DB_NAME: AlloyDB データベース名。
次のコマンドを実行して、データベース ユーザーにレプリケーション権限を付与します。
ALTER USER DB_USER WITH REPLICATION;
パブリケーションを作成します。複製するテーブルのパブリケーションのみを作成することをおすすめします。これにより、Datastream は関連データを読み取り専用にできるようになり、データベースと Datastream の負荷が軽減されます。
CREATE PUBLICATION PUBLICATION_NAME FOR TABLE SCHEMA1.TABLE1, SCHEMA2.TABLE2;
以下を置き換えます。
- PUBLICATION_NAME: パブリケーションの名前。Datastream のストリーム作成ウィザードでストリームを作成するときに、この名前を指定する必要があります。
- SCHEMA: テーブルを含むスキーマの名前。
- TABLE: 複製するテーブルの名前。
パブリケーションは、スキーマ内のすべてのテーブルのパブリケーションを作成できます。この方法で、今後作成するテーブルを含め、指定したスキーマのリストにあるテーブルの変更を複製できます。
CREATE PUBLICATION PUBLICATION_NAME FOR TABLES IN SCHEMA1, SCHEMA2;
データベース内のすべてのテーブルのパブリケーションを作成することもできます。この方法によって、ソース データベースと Datastream の両方の負荷が増加します。
CREATE PUBLICATION PUBLICATION_NAME FOR ALL TABLES;
次のコマンドを実行して、レプリケーション スロットを作成します。
SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('REPLICATION_SLOT_NAME', 'pgoutput');
以下を置き換えます。
- REPLICATION_SLOT_NAME: レプリケーション スロットの名前。 Datastream ストリーム作成ウィザードでストリームを作成するときに、この名前を指定する必要があります。
Datastream ユーザーを作成する
Datastream ユーザーを作成するには、次の PostgreSQL コマンドを入力します。
CREATE USER USER_NAME WITH REPLICATION LOGIN PASSWORD 'USER_PASSWORD';
以下を置き換えます。
- USER_NAME: 作成する Datastream ユーザーの名前。
- USER_PASSWORD: 作成する Datastream ユーザーのログイン パスワード。
作成したユーザーに次の権限を付与します。
GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO USER_NAME; GRANT USAGE ON SCHEMA SCHEMA_NAME TO USER_NAME; ALTER DEFAULT PRIVILEGES IN SCHEMA SCHEMA_NAME GRANT SELECT ON TABLES TO USER_NAME;
以下を置き換えます。
- SCHEMA_NAME: 権限の付与先となるスキーマの名前。
- USER_NAME: 権限を付与するユーザー。
次のステップ
- Datastream が PostgreSQL ソースと連携する仕組みについて学習します。