例: Aurora PostgreSQL DB クラスターにおける論理レプリケーションの使用
以下の手順では、2 つの Aurora PostgreSQL DB クラスター間で論理レプリケーションを開始する方法を示しています。「Aurora PostgreSQL DB クラスターの論理レプリケーションの設定」で説明したように、パブリッシャーとサブスクライバーの両方が、論理レプリケーション用に設定されている必要があります。
パブリッシャーとして指定されている Aurora PostgreSQL DB クラスターでも、レプリケーションスロットへのアクセスを許可する必要があります。そのためには、Amazon VPC サービスに基づいて Aurora PostgreSQL DB クラスターの仮想パブリッククラウド (VPC) に関連付けられているセキュリティグループを変更します。サブスクライバーの VPC に関連付けられているセキュリティグループをパブリッシャーのセキュリティグループに追加することで、インバウンドアクセスを許可します。詳細については、「Amazon VPC ユーザーガイド」の「セキュリティグループを使用してリソースへのトラフィックを制御する」を参照してください。
これらの準備手順が完了したら、次の手順で説明されているように、パブリッシャーには PostgreSQL の CREATE PUBLICATION
コマンドを、サブスクライバーには CREATE SUBSCRIPTION
コマンドを使用できます。
2 つの Aurora PostgreSQL DB クラスター間で論理レプリケーションを開始するには
これらの手順では、Aurora PostgreSQL DB クラスターに、サンプルテーブルを作成するデータベースを含むライターインスタンスがあることを前提としています。
パブリッシャーとしての Aurora PostgreSQL DB クラスター
次の SQL ステートメントを使用してテーブルを作成します。
CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
次の SQL ステートメントを使用して、パブリッシャーデータベース内にデータを挿入します。
INSERT INTO LogicalReplicationTest VALUES (generate_series(1,10000));
次の SQL ステートメントを使用して、テーブルにデータが存在することを確認します。
SELECT count(*) FROM LogicalReplicationTest;
次のように、
CREATE PUBLICATION
ステートメントを使用してこのテーブルのパブリケーションを作成します。CREATE PUBLICATION testpub FOR TABLE LogicalReplicationTest;
-
サブスクライバーとしての Aurora PostgreSQL DB クラスター
次のように、パブリッシャーで作成したものと同じ
LogicalReplicationTest
テーブルをサブスクライバーに作成します。CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
このテーブルが空であることを確認します。
SELECT count(*) FROM LogicalReplicationTest;
サブスクリプションを作成して、パブリッシャーから変更を取得します。パブリッシャーの Aurora PostgreSQL DB クラスターについて、次の詳細を使用する必要があります。
host (ホスト) - パブリッシャーである Aurora PostgreSQL DB クラスターのライター DB インスタンス。
ポート - 書き込み DB インスタンスがリッスンするポート。PostgreSQL のデフォルト値は 5432 です。
dbname (データベース名) – データベースの名前。
CREATE SUBSCRIPTION testsub CONNECTION 'host=
publisher-cluster-writer-endpoint
port=5432 dbname=db-name
user=user
password=password
' PUBLICATION testpub;注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。
サブスクリプションを作成すると、論理的なレプリケーションスロットがパブリッシャーで作成されます。
この例で、初期のデータがサブスクライバーにレプリケートされていることを確認するには、サブスクライバーデータベースで次の SQL ステートメントを使用します。
SELECT count(*) FROM LogicalReplicationTest;
パブリッシャーの以降のすべての変更がサブスクライバーにレプリケートされます。
論理レプリケーションはパフォーマンスに影響を与えます。レプリケーションタスクが完了したら、論理レプリケーションをオフにすることをお勧めします。