スキップしてコンテンツを表示

Amazon RDS for PostgreSQL および Aurora PostgreSQL 互換のブルー/グリーンデプロイを作成したときに発生するエラーを解決する方法を教えてください。

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) for PostgreSQL および Amazon Aurora PostgreSQL 互換エディションでブルー/グリーンデプロイを作成するときに発生するエラーを解決したいと考えています。

解決策

ブルー/グリーンデプロイの制限を確認し、エラーを特定する

Amazon RDS および Aurora PostgreSQL 互換のブルー/グリーンデプロイの制限を確認します。

デプロイに関する特定のエラーメッセージを見つけるには、次の手順を実行します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. ブルー/グリーンデプロイを選択します。
  4. [ログとイベント] タブを選択します。
  5. ログでエラーメッセージを確認します。

論理レプリケーション設定エラーを解決する

ブルー/グリーンデプロイを作成しても論理レプリケーションを有効にしないと、次のエラーメッセージが表示されます。

"Blue/Green Deployments require a DB instance with logical replication enabled.Before you create a Blue/Green Deployment for a DB instance, associate the DB instance with a custom DB instance parameter group that enables logical replication."

論理レプリケーションを有効にするには、次の手順を実行します。

  1. カスタムパラメータグループを作成するか、既存のグループを変更します。
  2. rds.logical_replication パラメータを 1 に設定します。
  3. カスタムパラメータグループを DB インスタンスに適用します。

注: デフォルトのパラメータグループ値を変更することはできません。

互換性のないレプリケーションパラメータを解決する

データベース数に対してレプリケーションスロットが不足しているブルー/グリーンデプロイを作成すると、次のエラーメッセージが表示されます。

"Creation of blue/green deployment failed due to incompatible parameter(s): max_replication_slots, and max_logical_replication_workers."

この問題を解決するには、次の手順を実行します。

  1. 次のクエリを実行して、データベースのリストを表示します。

    SELECT datname FROM pg_database;
  2. カスタムパラメータグループの次のパラメータを変更します。
    max_replication_slots は、データベースの合計数よりも大きい値に設定してください。
    max_wal_senders および max_logical_replication_workers は、アクティブな論理レプリケーションスロット数と同じ値に設定してください。
    max_worker_processes は、max_logical_replication_workersautovacuum_max_workersmax_parallel_workers の合計と等しい値に設定してください。

  3. ブルー/グリーンデプロイを新規作成します。

外部レプリケーションスロットのエラーを解決する

外部レプリケーションスロットが存在する状態でブルー/グリーンデプロイを作成すると、次のエラーメッセージが表示されます。

"Replica creation is canceled due to external replication."

この問題を解決するには、次の手順を実行します。

  1. 次のコマンドを実行して、既存のレプリケーションスロットを確認します。

    SELECT * FROM pg_replication_slots WHERE slot_type NOT LIKE 'physical';
  2. 次のコマンドを実行して、特定されたスロットをドロップします。

    SELECT pg_drop_replication_slot(slot_name);

    注: slot_name を、レプリケーションスロットの名前に置き換えます。

デプロイ後に発生する DDL 変更を解決する

ブルー/グリーンデプロイを作成した後にデータ定義言語 (DDL) を変更したり、ラージオブジェクトを変更したりすると、次のエラーメッセージが表示されます。

"DDL changes aren't supported for blue/green deployments.These changes aren't replicated from the blue environment to the green environment, and switchover will be blocked.Your green databases now have a status of REPLICATION_DEGRADED.Delete and recreate your blue/green deployment and avoid future DDL changes."

この問題を解決するには、ブルー/グリーンデプロイを削除してください。次に、ブルー/グリーンデプロイを新規作成します。

デプロイ後は、ブルー環境で DDL やラージオブジェクトを変更しないでください。

テーブルプライマリキーエラーを解決する

プライマリキーを持たないテーブルのレコードを更新または削除すると、次のエラーメッセージが表示されます。

"Logical replication target relation 'public.image_audit' has neither REPLICA IDENTITY index nor PRIMARY KEY and published relation does not have REPLICA IDENTITY FULL"

この問題を解決するには、更新または削除が必要なテーブルにプライマリキーを追加します。続いて、次のコマンドを実行して REPLICA IDENTITY FULL を設定します。

ALTER TABLE table_name REPLICA IDENTITY FULL;

注: table_name は、実際のテーブル名に置き換えてください。

PG_CRON 拡張機能の競合を解決する

デプロイで pg_cron 拡張機能を使用すると、次のエラーメッセージが表示されることがあります。

"role 'rdsrepladmin' cannot SET ROLE to 'rds_superuser'"

pg_cron 拡張機能のバックグラウンドワーカーはスーパーユーザーとして実行され、読み取り専用設定をバイパスするため、レプリケーションの競合が発生する可能性があります。

この問題を解決するには、ブルー/グリーンデプロイを作成した後に、すべてのグリーンデータベースで pg_cron 拡張機能をオフにします。デプロイ中は拡張機能をオフのままにしておきます。

コメントはありません

関連するコンテンツ