Aurora での PostgreSQL 論理レプリケーションの使用 - Amazon Aurora

Aurora での PostgreSQL 論理レプリケーションの使用

PostgreSQL 論理レプリケーションは、データベースの各部分のレプリケーションと同期を詳細に制御します。たとえば、論理レプリケーションを使用してデータベースの個別のテーブルをレプリケートできます。

PostgreSQL 論理レプリケーションと Amazon Aurora を使用する方法について以下に説明します。PostgreSQL 論理レプリケーションの実装の詳細については、PostgreSQL ドキュメントの 「論理レプリケーション」と「ロジカルデコーディングのコンセプト」を参照してください。

注記

論理レプリケーションは、Aurora PostgreSQL バージョン 2.2.0 (PostgreSQL 10.6 と互換) 以降で利用できます。

PostgreSQL 論理レプリケーションと Amazon Aurora を使用する方法について以下に説明します。

論理レプリケーションの設定

論理レプリケーションを使用するには、まず、クラスターパラメータグループの rds.logical_replication パラメータを設定します。次に、パブリッシャーとサブスクライバーを設定します。

論理レプリケーションは、発行およびサブスクライブモデルを使用します。パブリッシャーサブスクライバーはノードです。パブリケーションは、1 つ以上のデータベーステーブルから生成される変更のセットです。パブリッシャーのパブリケーションを指定します。サブスクリプションは、別のデータベースへの接続と、サブスクライブする 1 つ以上のパブリケーションを定義します。サブスクライバーのサブスクリプションを指定します。パブリケーションとサブスクリプションは、パブリッシャーとサブスクライバーの間の接続を作成します。

注記

PostgreSQL データベースの論理レプリケーションを実行するために、AWS ユーザーアカウントは rds_superuser ロールを必要とします。

Aurora での PostgreSQL 論理レプリケーションを有効にするには

  1. 論理レプリケーションで使用する新しい DB クラスターパラメータグループを作成します。詳細については、「DB クラスターパラメータグループの作成」を参照してください。以下の設定を使用します。

    • [パラメータグループファミリー] で、[aurora-postgres10] 以降を選択します。

    • [Type] で、[DB Cluster Parameter Group] を選択します。

  2. クラスターパラメータグループを変更します。詳細については、「DB クラスターパラメータグループのパラメータの変更」を参照してください。rds.logical_replication 静的パラメーターを 1 に設定します。

    rds.logical_replication パラメータを有効にすると、DB クラスターのパフォーマンスに影響します。

論理レプリケーションのパブリッシャーを設定するには

  1. パブリッシャーのクラスターパラメータグループを設定します。

    • パブリッシャーの既存の Aurora PostgreSQL DB クラスターを使用するには、エンジンバージョンが 10.6 以降であることが必要です。次の作業を行います。

      1. クラスターパラメータグループを変更し、これを論理レプリケーションを有効にしたときに作成したグループに設定します。Aurora PostgreSQL DB クラスターの変更の詳細については、「Amazon Aurora DB クラスターの変更」を参照してください。

      2. 静的パラメータの変更を反映するために DB クラスターを再起動します。クラスターパラメータグループに、静的パラメータ rds.logical_replication への変更が含まれます。

    • パブリッシャーの新しい Aurora PostgreSQL DB クラスターを使用するには、以下の設定を使用して DB クラスターを作成します。Aurora PostgreSQL DB クラスターの作成の詳細については、「DB クラスターの作成」を参照してください。

      1. [Amazon Aurora] エンジンを選択し、[PostgreSQL 互換] エディションを選択します。

      2. [DB エンジンのバージョン] で、PostgreSQL 10.6 以上との互換性がある Aurora PostgreSQL エンジンを選択します。

      3. [DB クラスターのパラメータグループ] で、論理レプリケーションを有効にしたときに作成したグループを選択します。

  2. パブリッシャーのセキュリティグループの着信ルールを変更し、サブスクライバーが接続することを許可します。通常、これを行うには、サブスクライバーの IP アドレスをセキュリティグループに含めます。セキュリティグループの変更の詳細については、Amazon Virtual Private Cloud ユーザーガイドの「VPC のセキュリティグループ」を参照してください。

データベーステーブルの論理レプリケーションの例

論理レプリケーションを実装するには、PostgreSQL の CREATE PUBLICATION コマンドと CREATE SUBSCRIPTION コマンドを使用します。

次の例では、テーブルデータが Aurora PostgreSQL データベース (パブリッシャー) から PostgreSQL データベース (サブスクライバー) にレプリケートされます。サブスクライバーデータベースとして、RDS PostgreSQL データベースまたは Aurora PostgreSQL データベースを指定できます。サブスクライバーとして、PosgreSQL 論理レプリケーションを使用するアプリケーションを指定することもできます。論理レプリケーション機構を設定すると、パブリッシャーで発生した変更は継続的にサブスクライバーに送信されます。

この例の論理レプリケーションを設定するには、以下の操作を行います。

  1. Aurora PostgreSQL DB クラスターをパブリッシャーとして設定します。これを行うには、「論理レプリケーションの設定」でパブリッシャーの設定時に説明した方法に従って、新しい Aurora PostgreSQL DB クラスターを作成します。

  2. パブリッシャーデータベースを設定します。

    たとえば、パブリッシャーデータベースで次の SQL ステートメントを使用してテーブルを作成します。

    CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
  3. 次の SQL ステートメントを使用して、パブリッシャーデータベース内にデータを挿入します。

    INSERT INTO LogicalReplicationTest VALUES (generate_series(1,10000));
  4. 次の SQL ステートメントを使用して、パブリッシャーでパブリケーションを作成します。

    CREATE PUBLICATION testpub FOR TABLE LogicalReplicationTest;
  5. サブスクライバーを作成します。サブスクライバーデータベースは、次のいずれかになります。

    • Aurora PostgreSQL データベースバージョン 2.2.0 (PostgreSQL 10.6 と互換) 以降。

    • Amazon RDS for PostgreSQL データベース (PostgreSQL DB エンジンバージョン 10.4 以降を搭載)。

    この例では、サブスクライバーとして Amazon RDS for PostgreSQL データベースを作成します。DB インスタンスの作成の詳細については、Amazon RDS ユーザーガイドの「DB インスタンスの作成」を参照してください。

  6. サブスクライバーデータベースを設定します。

    この例では、次の SQL ステートメントを使用してパブリッシャーで作成したものと似たようなテーブルを作成します。

    CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
  7. パブリッシャーのテーブルにはデータがあり、サブスクライバーにはまだデータがないことを、次の SQL ステートメントを両方のデータベースで使用して確認します。

    SELECT count(*) FROM LogicalReplicationTest;
  8. サブスクライバーでサブスクリプションを作成します。

    次の SQL ステートメントをサブスクライバーデータベースで使用します。また、パブリッシャークラスターの以下の設定を使用します。

    • ホスト – パブリッシャークラスターの書き込み DB インスタンス。

    • ポート – 書き込み DB インスタンスでリッスンするポート。PostgreSQL のデフォルト値は 5432 です。

    • dbname – パブリッシャークラスターの DB 名。

    CREATE SUBSCRIPTION testsub CONNECTION 'host=publisher-cluster-writer-endpoint port=5432 dbname=db-name user=user password=password' PUBLICATION testpub;

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

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

    SELECT count(*) FROM LogicalReplicationTest;

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

AWS Database Migration Service を使用した論理レプリケーション

AWS Database Migration Service (AWS DMS) を使用してデータベースまたはその一部をレプリケートできます。AWS DMS を使用して Aurora PostgreSQL データベースから別のオープンソースデータベースまたは商用データベースにデータを移行させます。AWS DMS の詳細については、AWS Database Migration Service ユーザーガイド を参照してください。

次の例では、Aurora PostgreSQL データベース (パブリッシャー) からの論理レプリケーションを設定し、次に AWS DMS を使用して移行させる方法を示します。この例では、「データベーステーブルの論理レプリケーションの例」で作成したのと同じパブリッシャーおよびサブスクライバーを使用しています。

AWS DMS で論理レプリケーションを設定するには、Amazon RDS のパブリッシャーとサブスクライバーに関する詳細が必要です。特に、パブリッシャーの書き込み DB インスタンスとサブスクライバーの DB インスタンスに関する詳細が必要です。

パブリッシャーの書き込み DB インスタンスについては以下の情報を取得します。

  • 仮想プライベートクラウド (VPC) の識別子

  • サブネットグループ

  • アベイラビリティーゾーン (AZ)

  • VPC セキュリティグループ

  • DB インスタンス ID

サブスクライバーの DB インスタンスについては以下の情報を取得します。

  • DB インスタンス ID

  • ソースエンジン

Aurora PostgreSQL での論理レプリケーションに AWS DMS を使用するには

  1. AWS DMS を使用するようにパブリッシャーデータベースを準備します。

    これを行うには、PostgreSQL 10.x 以降のデータベースで、AWS DMS ラッパー関数をパブリッシャーデータベースに適用する必要があります。このステップと以降のステップの詳細については、AWS Database Migration Service ユーザーガイド の「 AWS DMS のソースとして PostgreSQL バージョン 10.x 以降を使用する」を参照してください。

  2. AWS マネジメントコンソール にサインインし、AWS DMS コンソール (https://console.aws.amazon.com/dms) を開きます。右上で、パブリッシャーとサブスクライバーがある同じ AWS リージョンを選択します。

  3. AWS DMS レプリケーションインスタンスを作成します。

    パブリッシャーの書き込み DB インスタンスと同じ値を選択します。これらには、以下の設定が含まれます。

    • [VPC] で、書き込み DB インスタンスと同じ VPC を選択します。

    • [Replication Subnet Group (レプリケーションのサブネットグループ)] で、書き込み DB インスタンスと同じサブネットグループを選択します。

    • [アベイラビリティーゾーン] で、書き込み DB インスタンスと同じゾーンを選択します。

    • [VPC セキュリティグループ] で、書き込み DB インスタンスと同じグループを選択します。

  4. ソースの AWS DMS エンドポイントを作成します。

    次の設定を使用して、パブリッシャーをソースエンドポイントとして指定します。

    • [Endpoint type (エンドポイントタイプ)] で [Source endpoint (ソースエンドポイント)] を選択します。

    • [Select RDS DB Instance (RDS DB インスタンスの選択)] を選択します。

    • [RDS Instance (RDS インスタンス)] で、パブリッシャーの書き込み DB インスタンスの DB 識別子を選択します。

    • [Source engine (ソースエンジン)] で [postgres] を選択します。

  5. ターゲットの AWS DMS エンドポイントを作成します。

    次の設定を使用して、サブスクライバーをターゲットエンドポイントとして指定します。

    • [Endpoint type (エンドポイントタイプ)] で [Target endpoint (ターゲットエンドポイント)] を選択します。

    • [Select RDS DB Instance (RDS DB インスタンスの選択)] を選択します。

    • [RDS Instance (RDS インスタンス)] で、サブスクライバーの DB インスタンスの DB 識別子を選択します。

    • [Source engine (ソースエンジン)] の値を選択します。たとえば、サブスクライバーが RDS PostgreSQL データベースの場合は、[postgres] を選択します。サブスクライバーが Aurora PostgreSQL データベースである場合は、[aurora-postgresql] を選択します。

  6. AWS DMS データベース移行タスクを作成します。

    データベース移行タスクを使用して、移行するデータベーステーブルを指定し、ターゲットスキーマを使用してデータをマッピングして、ターゲットデータベースで新しいテーブルを作成します。少なくとも、[Task configuration (タスクの設定)] で以下の設定を使用します。

    • [Replication instance (レプリケーションインスタンス)] で、前のステップで作成したレプリケーションインスタンスを選択します。

    • [Source database endpoint (ソースデータベースエンドポイント)] で、前のステップで作成したパブリッシャーソースを選択します。

    • [Target database endpoint (ターゲットデータベースエンドポイント)] で、前のステップで作成したサブスクライバーターゲットを選択します。

    タスクの残りの詳細は、移行プロジェクトに応じて異なります。DMS タスクのすべての詳細を指定する方法の詳細については、AWS Database Migration Service ユーザーガイド の「AWS DMS タスクの使用」を参照してください。

AWS DMS は、タスクを作成した後で、パブリッシャーからサブスクライバーへのデータの移行を開始します。