2.3. Operator を使用したローカルデータベースの外部データベースサーバーへの移行
デフォルトでは、Red Hat Developer Hub は各プラグインのデータを PostgreSQL データベースでホストします。データベースのリストを取得すると、Developer Hub で設定されているプラグインの数によっては、複数のデータベースが表示される場合があります。ローカルの PostgreSQL サーバーでホストされている RHDH インスタンスから、AWS RDS、Azure データベース、Crunchy データベースなどの外部 PostgreSQL サービスにデータを移行できます。各 RHDH インスタンスからデータを移行するには、pg_dump
と psql
、または pgAdmin
などの PostgreSQL ユーティリティーを使用できます。
次の手順では、データベースコピースクリプトを使用して迅速な移行を実行します。
前提条件
手順
ターミナルで次のコマンドを実行して、ローカル PostgreSQL データベース Pod のポート転送を設定します。
oc port-forward -n <your-namespace> <pgsql-pod-name> <forward-to-port>:<forward-from-port>
ここでは、以下のようになります。
-
<pgsql-pod-name>
変数は、backstage-psql-<deployment-name>-<_index>
という形式の PostgreSQL Pod の名前を示します。 -
<forward-to-port>
変数は、PostgreSQL データの転送先のポートを示します。 <forward-from-port>
変数は、5432
などの PostgreSQL ローカルインスタンスのポートを示します。例: ポート転送の設定
oc port-forward -n developer-hub backstage-psql-developer-hub-0 15432:5432
-
次の
db_copy.sh
スクリプトのコピーを作成し、設定に応じて詳細を編集します。#!/bin/bash to_host=<db-service-host> 1 to_port=5432 2 to_user=postgres 3 from_host=127.0.0.1 4 from_port=15432 5 from_user=postgres 6 allDB=("backstage_plugin_app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search") 7 for db in ${!allDB[@]}; do db=${allDB[$db]} echo Copying database: $db PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -c "create database $db;" pg_dump -h $from_host -p $from_port -U $from_user -d $db | PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -d $db done
- 1
- 宛先ホスト名 (例:
<db-instance-name>.rds.amazonaws.com
)。 - 2
- 宛先ポート (例:
5432
)。 - 3
- 宛先サーバーのユーザー名 (例:
postgres
)。 - 4
- ソースホスト名 (例:
127.0.0.1
)。 - 5
- 送信元ポート番号 (例:
<forward-to-port>
変数)。 - 6
- ソースサーバーのユーザー名 (例:
postgres
)。 - 7
- インポートするデータベースの名前を二重引用符で囲み、スペースで区切ります (例:
"backstage_plugin_app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search"
)。
データをコピーするための宛先データベースを作成します。
/bin/bash TO_PSW=<destination-db-password> /path/to/db_copy.sh 1
- 1
<destination-db-password>
変数は、宛先データベースに接続するためのパスワードを示します。
注記データのコピーが完了したら、ポート転送を停止できます。大規模データベースの処理と圧縮ツールの使用に関する詳細は、PostgreSQL Web サイトの Handling Large Databases セクションを参照してください。
-
Backstage
カスタムリソース (CR) を再設定します。詳細は、Operator を使用した外部 PostgreSQL インスタンスの設定 を参照してください。 再設定後、
Backstage
CR の末尾に次のコードが存在することを確認します。# ... spec: database: enableLocalDb: false application: # ... extraFiles: secrets: - name: {my-product-database-certificates-secrets} key: postgres-crt.pem # key name as in {my-product-database-certificates-secrets} Secret extraEnvs: secrets: - name: {my-product-database-secrets} # ...
注記Backstage
CR を再設定すると、対応するStatefulSet
およびPod
オブジェクトは削除されますが、PersistenceVolumeClaim
オブジェクトは削除されません。ローカルPersistenceVolumeClaim
オブジェクトを削除するには、次のコマンドを使用します。oc -n developer-hub delete pvc <local-psql-pvc-name>
<local-psql-pvc-name>
変数は、data-<psql-pod-name>
という形式です。- 設定の変更を適用します。
検証
次のコマンドを実行して、RHDH インスタンスが移行したデータを使用して実行されており、ローカルの PostgreSQL データベースが含まれていないことを確認します。
oc get pods -n <your-namespace>
出力で次の詳細を確認します。
-
backstage-developer-hub-xxx
Pod が実行中の状態であること。 backstage-psql-developer-hub-0
Pod が利用不可であること。これらの詳細は、OpenShift Container Platform Web コンソールの Topology ビューを使用して確認することもできます。
-