Amazon RDS PostgreSQL
Doris のストリーミング取り込みは、Amazon RDS PostgreSQL 14 以降からのデータ同期に対応しています。同期タスクを開始する前に、RDS インスタンスで論理レプリケーションを有効にし、同期ユーザー、権限、Publication の設定を完了する必要があります。
このドキュメントは RDS PostgreSQL インスタンスの管理者を対象とし、Doris のストリーミング取り込みに必要な前提手順を説明します。
事前確認のチェックリスト
設定を始める前に、以下の条件を確認してください。
| 確認項目 | 要件 |
|---|---|
| RDS PostgreSQL のバージョン | 14 以降 |
| 操作権限 | パラメータグループの変更とインスタンスの再起動に必要な AWS 権限 |
| データベースの権限 | ユーザーの作成、権限の付与、Publication の作成に必要な権限 |
| メンテナンス時間帯 | 利用の少ない時間帯を確保済み(論理レプリケーションのパラメータを変更するにはインスタンスの再起動が必要) |
設定手順の概要
設定は次の順序で行います。
rds.logical_replicationの現在の状態を確認する- カスタムパラメータグループを作成して設定する(有効になっていない場合)
- パラメータグループをインスタンスに適用し、再起動する
- Doris の同期ユーザーを作成して権限を付与する
- Doris がサブスクライブする Publication を作成する
ステップ 1: 現在の設定を確認する
目的: RDS インスタンスで論理レプリケーションが有効かどうかを確認し、パラメータグループを変更する必要があるか判断します。
RDS インスタンスに接続した後、次の SQL を実行します。
SHOW rds.logical_replication;
結果に応じて、次の手順に進んでください。
| 戻り値 | 意味 | 次の手順 |
|---|---|---|
on | 論理レプリケーションは有効 | ステップ 4: 同期ユーザーを作成するに進む |
off | 論理レプリケーションは無効 | ステップ 2に進む |
ステップ 2: パラメータグループを設定する
目的: カスタムパラメータグループを作成し、rds.logical_replication を有効にします。
手順:
-
AWS RDS コンソールにログインします。
-
左側のナビゲーションペインで Parameter groups を選択し、Create parameter group をクリックします。
-
対象インスタンスに一致する PostgreSQL のバージョンファミリーを選択し、新しいパラメータグループを作成します。
-
パラメータグループを編集し、
rds.logical_replicationを検索して値を1に設定します。
-
Save Changes をクリックして保存します。
主なパラメータの説明:
| パラメータ | 値 | 説明 |
|---|---|---|
rds.logical_replication | 1 | 論理レプリケーションを有効にする。wal_level を logical に設定することに相当する |
ステップ 3: パラメータグループを適用して再起動する
目的: 新しいパラメータグループを RDS インスタンスに関連付け、インスタンスを再起動して設定を有効にします。
手順:
- RDS コンソールで対象インスタンスを選択し、Modify をクリックします。
- DB parameter group で、ステップ 2で作成したパラメータグループを選択します。
- Apply immediately を選択し、変更をすぐに適用します。
- 設定を有効にするため、RDS インスタンスを再起動します。
rds.logical_replication パラメータの変更を有効にするには、RDS インスタンスの再起動が必要です。この操作は利用の少ない時間帯に行ってください。
ステップ 4: 同期ユーザーを作成する
目的: Doris のストリーミング取り込み専用のデータベースアカウントを作成し、必要な読み取り権限とレプリケーション権限を付与します。
1. ユーザーを作成する
CREATE USER doris_sync PASSWORD '<password>';
2. スキーマへのアクセス権限を付与する
以下では public スキーマを例にします。必要に応じて対象のスキーマに置き換えてください。
GRANT USAGE ON SCHEMA "public" TO doris_sync;
GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO doris_sync;
ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO doris_sync;
3. レプリケーション権限を付与する
GRANT rds_replication TO doris_sync;
Amazon RDS PostgreSQL では、rds_replication ロールを使用してレプリケーション権限を付与します。標準の PostgreSQL の REPLICATION 属性は使用しません。
権限の概要:
| 権限 | 用途 |
|---|---|
USAGE ON SCHEMA | 指定したスキーマへのアクセスを許可する |
SELECT ON ALL TABLES | スキーマ内の既存のすべてのテーブルの読み取りを許可する |
ALTER DEFAULT PRIVILEGES ... SELECT | 今後追加されるテーブルに SELECT 権限を自動的に付与する |
rds_replication | RDS で論理レプリケーションを行うために必要なロール |
ステップ 5: Publication を作成する
目的: Doris がサブスクライブする Publication を作成します。
次の SQL を実行します。
CREATE PUBLICATION dbz_publication FOR ALL TABLES;
現在、Doris がサポートする Publication 名は dbz_publication のみであり、FOR ALL TABLES を指定して作成する必要があります。カスタム名の Publication や、一部のテーブルだけを指定した Publication にはまだ対応していません。
注: 同期ユーザーが
rds_superuserロールなどのスーパーユーザー権限を持つ場合、Doris はタスク開始時にこの Publication を自動的に作成するため、この手順を手動で実行する必要はありません。
よくある質問
Q1: SHOW rds.logical_replication; が on を返した場合も、インスタンスの再起動は必要ですか?
いいえ。on は論理レプリケーションがすでに有効であることを示します。ステップ 4: 同期ユーザーを作成するに直接進めます。
Q2: 別の名前の Publication を使用できますか?
いいえ。現在、Doris がサポートする Publication 名は dbz_publication のみであり、FOR ALL TABLES を指定して作成する必要があります。
Q3: rds_replication ロールを使用する必要がありますか?
はい。RDS PostgreSQL では、セキュリティ上の理由から標準の PostgreSQL の REPLICATION 属性を使用できません。GRANT rds_replication で権限を付与する必要があります。
Q4: Publication を手動で作成する必要がありますか?
必ずしも必要ではありません。同期ユーザーが rds_superuser などのスーパーユーザー権限を持つ場合、Doris が dbz_publication を自動的に作成するため、ステップ 5を省略できます。
トラブルシューティング
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
SHOW rds.logical_replication; が依然として off を返す | パラメータグループがインスタンスに関連付けられていない、またはインスタンスが再起動されていない | インスタンスが新しいパラメータグループを使用しているか確認し、再起動する |
| ユーザーの作成時に権限エラーが発生する | 現在のアカウントに十分な権限がない | ユーザー作成権限を持つ管理者アカウントを使用する |
GRANT rds_replication がエラーを返す | 現在のアカウントにこのロールを付与する権限がない | rds_superuser アカウント、またはロールの付与権限を持つ別のアカウントを使用する |
| Doris タスクで Publication が存在しないと報告される | dbz_publication が作成されていない、または権限が不足している | ステップ 5を手動で実行するか、同期ユーザーにスーパーユーザー権限を付与する |
| パラメータの変更が反映されない | Apply immediately が選択されていない、またはインスタンスが再起動されていない | ステップ 3を再度実行する |