Canvas LMS + AWS RDS PostreSQL で wal_level を logical にする必要が出た

Invalid date

背景

AWS RDS PostgreSQL の wal_level を logical にする必要が出た

Canvas LMS + AWS RDS の構成でセットアップを行おうとすると、 PostgreSQL の wal_level が logical である事を求められた。

通常、postgres.conf を修正するが、RDS ではできないのでパラメーターグループの設定を行った。

rds.logical_replication = 1 と変更する必要がある。

環境

設定
DB エンジン Aurora PostgreSQL
エンジンバージョン 10.14
DB クラスターのパラメータグループ default.aurora-postgresql10

手順

パラメーターグループをデフォルトのまま使っていたので、別途新しくパラメーターグループを作った。

DB クラスターパラメータグループに作る。

参考

wal_level のエラー

stable/2021-04-14 のリリースを用いての構築では問題なかったが、 stable/2021-08-18 のリリースを用いた構築では

RAILS_ENV=production bundle exec rake db:initial_setup

の段階でエラーがでて先に進まなくなった。

ERROR:  wal_level must be set to 'logical'
HINT:  WAL control functions cannot be executed when wal_level < logical.

正確には stable/2021-04-14 のリリースでもディスカッション機能で wal_level logical のエラーは出ていた。 Canvas LMS 自体が、この機能を多用するようになったのかもしれない。

RDS(PostgreSQL)のトランザクションログ(WAL)へ CDC に必要な内容を出力する

主にここを参考にした。 ただ私はクラスターで構成していたので「DB クラスターパラメータグループ」のパラメーターグループを作成した。

How to set the wal_level on AWS RDS Postgresql 13?

rds.logical_replication = 1 だけではなく shared_preload_libraries = pglogical も必要だ、という事がわかった。非常に助かった…

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

クラスタ側のパラメーターグループを変える必要がある。 この点、AuroraとそうでないPostgresqlで異なるようだ。


Profile picture

Written by tin-machine 技術関連のメモ Twitter