

# 例: Aurora PostgreSQL DB クラスターにおける論理レプリケーションの使用
<a name="AuroraPostgreSQL.Replication.Logical.PostgreSQL-Example"></a>

以下の手順では、2 つの Aurora PostgreSQL DB クラスター間で論理レプリケーションを開始する方法を示しています。「[Aurora PostgreSQL DB クラスターの論理レプリケーションの設定](AuroraPostgreSQL.Replication.Logical.Configure.md)」で説明したように、パブリッシャーとサブスクライバーの両方が、論理レプリケーション用に設定されている必要があります。

パブリッシャーとして指定されている Aurora PostgreSQL DB クラスターでも、レプリケーションスロットへのアクセスを許可する必要があります。そのためには、Amazon VPC サービスに基づいて Aurora PostgreSQL DB クラスターの仮想パブリッククラウド (VPC) に関連付けられているセキュリティグループを変更します。サブスクライバーの VPC に関連付けられているセキュリティグループをパブリッシャーのセキュリティグループに追加することで、インバウンドアクセスを許可します。詳細については、「*Amazon VPC ユーザーガイド*」の「[セキュリティグループを使用してリソースへのトラフィックを制御する](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)」を参照してください。

これらの準備手順が完了したら、次の手順で説明されているように、パブリッシャーには PostgreSQL の `CREATE PUBLICATION` コマンドを、サブスクライバーには `CREATE SUBSCRIPTION` コマンドを使用できます。

**2 つの Aurora PostgreSQL DB クラスター間で論理レプリケーションを開始するには**

これらの手順では、Aurora PostgreSQL DB クラスターに、サンプルテーブルを作成するデータベースを含むライターインスタンスがあることを前提としています。

1. **パブリッシャーとしての Aurora PostgreSQL DB クラスター**

   1. 次の SQL ステートメントを使用してテーブルを作成します。

      ```
      CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
      ```

   1. 次の SQL ステートメントを使用して、パブリッシャーデータベース内にデータを挿入します。

      ```
      INSERT INTO LogicalReplicationTest VALUES (generate_series(1,10000));
      ```

   1. 次の SQL ステートメントを使用して、テーブルにデータが存在することを確認します。

      ```
      SELECT count(*) FROM LogicalReplicationTest;
      ```

   1. 次のように、`CREATE PUBLICATION` ステートメントを使用してこのテーブルのパブリケーションを作成します。

      ```
      CREATE PUBLICATION testpub FOR TABLE LogicalReplicationTest;
      ```

1. **サブスクライバーとしての Aurora PostgreSQL DB クラスター**

   1. 次のように、パブリッシャーで作成したものと同じ `LogicalReplicationTest` テーブルをサブスクライバーに作成します。

      ```
      CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
      ```

   1. このテーブルが空であることを確認します。

      ```
      SELECT count(*) FROM LogicalReplicationTest;
      ```

   1. サブスクリプションを作成して、パブリッシャーから変更を取得します。パブリッシャーの 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;
      ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

      サブスクリプションを作成すると、論理的なレプリケーションスロットがパブリッシャーで作成されます。

   1. この例で、初期のデータがサブスクライバーにレプリケートされていることを確認するには、サブスクライバーデータベースで次の SQL ステートメントを使用します。

      ```
      SELECT count(*) FROM LogicalReplicationTest;
      ```

パブリッシャーの以降のすべての変更がサブスクライバーにレプリケートされます。

論理レプリケーションはパフォーマンスに影響を与えます。レプリケーションタスクが完了したら、論理レプリケーションをオフにすることをお勧めします。