背景
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で異なるようだ。