このページでは、Cloud SQL で直接作成された既存の Cloud SQL for PostgreSQL インスタンスにデータベースを移行する方法について説明します。
このパスは、移行先インスタンスが別のチームによって管理されている場合や、Database Migration Service の外部でインスタンスを作成する必要がある場合(たとえば、Terraform を使用する場合、特定のカスタムフラグが必要な場合、高度なネットワーク トポロジが必要な場合など)に便利です。移行の要件が異なる場合は、別の移行フローを検討してください。詳細については、 PostgreSQL の移行を開始するをご覧ください。
大まかに、移行は次の手順で行われます。
- Database Migration Service が新しいデータベースにデータを移動できるように、移行元データベースを構成します。
- 移行元の PostgreSQL インスタンスへのネットワーク接続を設定します。
- 既存の移行先 Cloud SQL インスタンスを準備して構成します。
- ソース接続プロファイルと移行ジョブを作成します。
- 移行ジョブを開始してモニタリングします。
- 移行ジョブをプロモートし、新しいデータベースを使用するようにアプリケーションを移行します。
費用
このドキュメントでは、課金対象である次のGoogle Cloudコンポーネントを使用します。
- Cloud SQL( Cloud SQL の料金をご覧ください)。
- 顧客管理の暗号鍵(CMEK)の保存に使用する場合: Cloud Storage( Cloud Storage の料金をご覧ください)。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- この移行パスがシナリオを完全にサポートできるかどうかを確認します。次のページをご覧ください。
- シナリオの概要ページの サポートされている移行元と移行先に、サポートされているすべての移行元と移行先のバージョンが一覧表示されます。
- 既存のインスタンスに関する既知の制限事項では、既存の宛先インスタンスに既存のユーザー定義データが含まれていてはならないという要件など、制限事項について説明しています。
- 宛先データベースを作成するリージョンを検討します。Database Migration Service は完全にリージョン対応のプロダクトです。つまり、移行に関連するすべてのエンティティ(移行元と移行先の接続プロファイル、移行ジョブ、移行先データベース、コンバージョン ワークスペース)を 1 つのリージョンに保存する必要があります。
- Google Cloud コンソールのプロジェクト セレクタ ページで、 Google Cloud プロジェクトを選択または 作成します。
- Database Migration Service API と Cloud SQL Admin API を有効にします。
必要なロール
Database Migration Service を使用して同種の PostgreSQL 移行を実行するために必要な権限を取得するには、プロジェクトに対する必要な IAM ロールを付与するよう管理者に依頼してください。
-
データベース移行管理者(
roles/datamigration.admin) -
Cloud SQL 編集者(
roles/cloudsql.editor) - Database Migration Service の外部で移行先インスタンスを作成または構成する必要がある場合は、
Cloud SQL 管理者(
roles/cloudsql.admin)も必要です。 -
Cloud SQL Studio ユーザー(
roles/cloudsql.studioUser)
ロールの付与の詳細については、Identity and Access Management のドキュメントの アクセスを管理するをご覧ください。
これらの事前定義ロールには、Database Migration Service を使用して同種の PostgreSQL 移行を実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Database Migration Service を使用して同種の PostgreSQL 移行を実行するには、次の権限が必要です。
datamigration.*cloudsql.instances.createcloudsql.instances.getcloudsql.instances.listcloudsql.instances.updatecloudsql.instances.deletecloudsql.operations.getcloudsql.users.listcloudsql.users.getcloudsql.users.createcloudsql.users.updatecloudsql.users.delete
カスタムロールや他の 事前定義ロールを使用して、これらの権限を取得することもできます。
ソース データベースを準備する
移行するソースデータを準備する手順は次のとおりです。
- 移行元ネットワークの接続方法を選択して構成する。
- ソース データベース インスタンスを構成します。大まかな手順は次のとおりです。
- ソース データベースと移行対象のすべてのデータベースに
pglogicalPostgreSQL 拡張機能(バージョン 2.2.1 以降)をインストールします。 - PostgreSQL パラメータを構成します。
wal_level = logicalを設定し、max_replication_slots、max_wal_senders、max_worker_processesに適切な値を設定します。 - 移行ユーザーにレプリケーション権限を付与し、移行先の Cloud SQL インスタンスからの接続を許可するように
pg_hba.confを構成します。
詳細な手順については、 移行元データベースを構成するをご覧ください。
- ソース データベースと移行対象のすべてのデータベースに
- ソース接続プロファイルを作成する。
移行先インスタンスを準備して構成する
既存の Cloud SQL インスタンス(別のチームによって事前にプロビジョニングされたインスタンスや Terraform で管理されているインスタンスなど)に移行する場合は、移行ジョブを作成する前に、インスタンスが Database Migration Service のすべての前提条件を満たしていることを確認してください。
- インスタンスの準備状況とデータ状態:
- 宛先インスタンスは、
RUNNABLE状態のスタンドアロン インスタンス(レプリカではない)である必要があります。 - インスタンスは、移行ジョブおよび接続プロファイルと同じ Google Cloud リージョンに存在する必要があります。
- インスタンスは、一度に 1 つのアクティブな移行ジョブにのみ関連付けることができます。
- 移行先インスタンスに、既存のユーザーデータ、ユーザー定義テーブル、システム データベース以外のデータベースが含まれていない。インスタンスに既存のユーザーデータが存在する場合、移行ジョブの検証は失敗します。詳細については、 既存の移行先インスタンスへの移行の制限事項をご覧ください。必要に応じて、 移行先インスタンスから既存のデータを消去します。
- 宛先インスタンスは、
- データベース フラグの構成: 移行先の Cloud SQL for PostgreSQL インスタンスで
cloudsql.enable_pglogicalフラグを有効にします。このフラグは、論理レプリケーションに必要です。フラグの設定の詳細については、 データベース フラグの構成をご覧ください。 - データベース ユーザーの認証情報と権限: データベースとロールを管理するために、必要な管理データベース ユーザー アカウント(デフォルトの
postgresユーザーやcloudsqlsuperuserロールを持つ専用の移行ユーザーなど)が移行先インスタンスに存在することを確認します。データベース ユーザーの作成と管理は、標準のpsqlコマンドまたは Google Cloud コンソールを使用して行います。詳細については、Cloud SQL ドキュメントの ユーザーを管理するをご覧ください。 - ネットワーク接続の要件: 選択した接続方法に従って、移行先インスタンスのネットワーキングが移行元データベースと通信するように正しく構成されていることを確認します。
- Private Service Connect: 移行先インスタンスで Private Service Connect が有効になっている場合は、Private Service Connect アウトバウンド ネットワーク アタッチメントが構成されている必要があります。Cloud SQL のドキュメントの Private Service Connect のアウトバウンド接続をご覧ください。
- Virtual Private Cloud ピアリング(プライベート サービス アクセス / プライベート IP): 移行先インスタンスでは、移行元データベースとピアリングまたはルーティングする Virtual Private Cloud ネットワークでプライベート IP が有効になっている必要があります。 プライベート IP を構成するをご覧ください。
- パブリック IP 許可リスト: パブリック IP 接続を使用する場合は、移行先インスタンスでパブリック IP を有効にし、移行元ファイアウォールでインスタンスの送信 IP アドレス(インスタンスが高可用性用に構成されている場合は、プライマリ送信 IP とセカンダリ送信 IP の両方)を許可リストに登録します。 パブリック IP のネットワークを承認するをご覧ください。
- インスタンスのデモート通知:
- 標準の PostgreSQL 移行の場合、Database Migration Service は既存のスタンドアロンの移行先インスタンスをデモートして、移行元データベースの外部レプリカとして構成します。 Google Cloud コンソールで移行ジョブを作成するときに、移行先インスタンス ID を入力して、この降格を確認する必要があります。
- インスタンスを降格しても、Cloud SQL for PostgreSQL データベースは読み取り専用モードになりませんが、レプリケーションの競合を防ぐために、移行に参加しているテーブルまたはデータベースへの書き込みオペレーションは避ける必要があります。
- 自動バックアップ、ポイントインタイム リカバリ(PITR)、Cloud SQL リードレプリカの作成は、移行ジョブをプロモートするまで一時停止されます。詳細については、 既存の移行先インスタンスへの移行の制限事項をご覧ください。
- Infrastructure as Code(Terraform など)を使用して移行先インスタンスを管理している場合、Database Migration Service は移行中にバックアップと復元の設定を変更します。Terraform 構成のドリフトの処理に関するガイダンスについては、 問題の診断をご覧ください。
移行ジョブを作成して実行する
移行を構成して実行する手順は次のとおりです。
- 省略可: 移行ジョブの独自の証明書または暗号鍵を管理する場合は、 必要な暗号鍵を準備します。
-
既存の移行先インスタンスの移行ジョブを作成して実行する。
Database Migration Service のオブザーバビリティ機能を使用すると、移行の進行状況と移行先インスタンスの健全性をモニタリングできます。 移行ジョブの指標をご覧ください。
移行を完了する
アプリケーションを新しい Cloud SQL for PostgreSQL インスタンスに切り替える場合は、次の手順で移行を完了します。
- 省略可: カスケード リードレプリカを設定する。カスケード リードレプリカを使用する場合は、移行ジョブが CDC フェーズに入ったときに構成できます。
- ソース データベースに対するすべての書き込みオペレーションを停止します。読み取り専用モードに切り替えて、運用機能を維持できます。
- 移行ジョブをプロモートする。
- 省略可: 移行データの完全性を検証します。
- Infrastructure as Code(Terraform など)を使用して移行先データベースを管理している場合は、プロモート後に構成を再適用して、移行中に Database Migration Service によって調整された設定を調整します。
次のステップ
Cloud SQL for PostgreSQL の Google Cloud 機能の詳細を確認する。 Cloud SQL for PostgreSQL の機能をご覧ください。