Amazon Relational Database Service (Amazon RDS) for PostgreSQL および Amazon Aurora PostgreSQL 互換エディションでブルー/グリーンデプロイを作成するときに発生するエラーを解決したいと考えています。
解決策
ブルー/グリーンデプロイの制限を確認し、エラーを特定する
Amazon RDS および Aurora PostgreSQL 互換のブルー/グリーンデプロイの制限を確認します。
デプロイに関する特定のエラーメッセージを見つけるには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [データベース] を選択します。
- ブルー/グリーンデプロイを選択します。
- [ログとイベント] タブを選択します。
- ログでエラーメッセージを確認します。
論理レプリケーション設定エラーを解決する
ブルー/グリーンデプロイを作成しても論理レプリケーションを有効にしないと、次のエラーメッセージが表示されます。
"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."
論理レプリケーションを有効にするには、次の手順を実行します。
- カスタムパラメータグループを作成するか、既存のグループを変更します。
- rds.logical_replication パラメータを 1 に設定します。
- カスタムパラメータグループを DB インスタンスに適用します。
注: デフォルトのパラメータグループ値を変更することはできません。
互換性のないレプリケーションパラメータを解決する
データベース数に対してレプリケーションスロットが不足しているブルー/グリーンデプロイを作成すると、次のエラーメッセージが表示されます。
"Creation of blue/green deployment failed due to incompatible parameter(s): max_replication_slots, and max_logical_replication_workers."
この問題を解決するには、次の手順を実行します。
-
次のクエリを実行して、データベースのリストを表示します。
SELECT datname FROM pg_database;
-
カスタムパラメータグループの次のパラメータを変更します。
max_replication_slots は、データベースの合計数よりも大きい値に設定してください。
max_wal_senders および max_logical_replication_workers は、アクティブな論理レプリケーションスロット数と同じ値に設定してください。
max_worker_processes は、max_logical_replication_workers、autovacuum_max_workers、max_parallel_workers の合計と等しい値に設定してください。
-
ブルー/グリーンデプロイを新規作成します。
外部レプリケーションスロットのエラーを解決する
外部レプリケーションスロットが存在する状態でブルー/グリーンデプロイを作成すると、次のエラーメッセージが表示されます。
"Replica creation is canceled due to external replication."
この問題を解決するには、次の手順を実行します。
-
次のコマンドを実行して、既存のレプリケーションスロットを確認します。
SELECT * FROM pg_replication_slots WHERE slot_type NOT LIKE 'physical';
-
次のコマンドを実行して、特定されたスロットをドロップします。
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 拡張機能をオフにします。デプロイ中は拡張機能をオフのままにしておきます。