このページでは、Cloud SQL for PostgreSQL への同種の PostgreSQL 移行のクイックスタート移行を実行する方法について説明します。
概要
クイック スタート移行は、同種の PostgreSQL シナリオ向けの軽量な継続的移行フローです。クイックスタート移行を使用すると、Database Migration Service は、データベースの移行に必要なすべてのもの(ネットワーク コンポーネント(ネットワーク アタッチメント、サブネット、プライベート接続構成)、接続プロファイル、移行ジョブ)を自動的に設定できます。
クイックスタート移行を使用すると、データを既存の Cloud SQL インスタンスに移動したり、移行の構成時に新しいインスタンスを作成したりできます。クイック スタート移行は、次の場合に最適です。
- データダンプの並列処理設定を正確に制御する必要がない基本的な移行。
- データベースをある Google Cloud プロジェクトから別のプロジェクトに移行する。クイックスタート移行を構成するときに、移行元とは異なるプロジェクトに移行先インスタンスを作成し、別のプロジェクトの Virtual Private Cloud(VPC)ネットワークにネットワーク アタッチメントとサブネットを作成するように Database Migration Service を設定できます。
-
Google CloudVirtual Private Cloud(VPC)ネットワークにプライベート IP アドレスを持つソース(Compute Engine 上のセルフマネージド データベースや、プライベート ネットワーキングが有効になっている Cloud SQL for PostgreSQL インスタンスなど)から移行する。
Google Cloud の外部でホストされているソースには、VPC ネットワーク内のプライベート IP アドレスでアクセスできるように、追加のネットワーク コンポーネント(Cloud VPN 接続など)が必要になる場合があります。
- クイック スタート移行では、パブリック IP と Private Service Connect インターフェースの接続がサポートされています。クイックスタート移行では、リバース SSH トンネルはサポートされていません。
クイック スタート移行の詳細については、Database Migration Service のメイン ドキュメントの クイック スタート移行の概要をご覧ください。
始める前に
- クイックスタート移行がシナリオを完全にサポートできるかどうかを確認します。 クイックスタート移行の制限事項をご覧ください。
- Google Cloud コンソールのプロジェクト セレクタ ページで、 Google Cloud プロジェクトを選択または作成します。
- Database Migration Service、Compute Engine、Network Connectivity Center、Cloud SQL Admin API を有効にします。
必要なロール
Database Migration Service を使用して Cloud SQL へのクイックスタート移行を実行するために必要な権限を取得するには、関連するプロジェクトで移行に関係するアカウントに必要な Identity and Access Management(IAM)ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、IAM ドキュメントの アクセス権の管理をご覧ください。
ソース プロジェクトのロールと権限
プライベート IP 接続を使用してGoogle Cloud プロジェクトのソース データベースに接続する場合は、ソース データベースが存在するプロジェクトの特定のアカウントに次のロールを付与します。
- 移行を実行するユーザー アカウントの場合:
-
Compute ネットワーク管理者(
roles/compute.networkAdmin) -
ブラウザ(
roles/browser)
-
Compute ネットワーク管理者(
- 宛先プロジェクトの Database Migration Service サービス アカウントの場合:
Compute ネットワーク閲覧者(
roles/compute.networkViewer)Database Migration Service サービス アカウントは、Database Migration Service API を有効にすると作成されます。このサービス アカウントに関連付けられたメールアドレスは自動的に生成され、変更できません。このメールアドレスの形式は次のとおりです。
service-DESTINATION_PROJECT_NUMBER@gcp-sa-datamigration.
これらの事前定義ロールには、Database Migration Service を使用したクイックスタート移行の一環として、移行元データベース プロジェクトで接続を設定するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限(ソース)」セクションを開いてご確認ください。
必要な権限(ソース)
Database Migration Service を使用して同種のクイックスタート移行を実行するには、次の権限が必要です。
移行を実行するユーザー アカウントの場合:
compute.networks.getcompute.networks.listcompute.networks.updatePolicycompute.subnetworks.getcompute.subnetworks.listcompute.subnetworks.createcompute.subnetworks.usecompute.networkAttachments.createcompute.networkAttachments.getcompute.networkAttachments.listcompute.networkAttachments.updatecompute.networkAttachments.usecompute.regionOperations.getnetworkconnectivity.internalRanges.createnetworkconnectivity.internalRanges.getnetworkconnectivity.operations.getresourcemanager.projects.getIamPolicy
宛先プロジェクトの Database Migration Service サービス アカウントの場合:
compute.networkAttachments.get
宛先プロジェクトのロールと権限
移行先データベースが存在する Google Cloud プロジェクトで移行を実行するユーザー アカウントに、次のロールを付与します。
-
データベース移行管理者(
roles/datamigration.admin) -
Cloud SQL 管理者(
roles/cloudsql.admin) -
ブラウザ(
roles/browser)
また、移行先プロジェクト(service-DESTINATION_PROJECT_NUMBER@gcp-sa-datamigration.)の Database Migration Service サービス アカウントには、移行先プロジェクトに対する Database Migration Service エージェント(roles/datamigration.serviceAgent)ロールが必要です。 Google Cloud は、Database Migration Service API を有効にすると、このロールを自動的に付与します。
これらの事前定義ロールには、Database Migration Service を使用したクイックスタート移行の一環として、移行先データベース プロジェクトに必要な移行コンポーネントを設定するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限(宛先)」セクションを開いてご確認ください。
必要な権限(宛先)
Database Migration Service を使用して同種のクイックスタート移行を実行するには、次の権限が必要です。
移行を実行するユーザー アカウントの場合:
datamigration.privateconnections.getdatamigration.privateconnections.listdatamigration.privateconnections.createdatamigration.migrationjobs.createdatamigration.migrationjobs.updatedatamigration.migrationjobs.verifydatamigration.migrationjobs.startdatamigration.migrationjobs.getdatamigration.migrationjobs.fetchSourceObjectsdatamigration.operations.getdatamigration.connectionprofiles.createdatamigration.connectionprofiles.getdatamigration.connectionprofiles.updatedatamigration.locations.listdatamigration.locations.fetchStaticIpscloudsql.instances.createcloudsql.instances.getcloudsql.instances.listcloudsql.instances.updatecloudsql.instances.deletecloudsql.operations.getcloudsql.users.getcloudsql.users.listcloudsql.users.createcloudsql.users.updatecloudsql.users.deleteresourcemanager.projects.getIamPolicy
宛先プロジェクトの Database Migration Service サービス アカウントの場合:
cloudsql.instances.connectcloudsql.instances.executeSqlcloudsql.instances.getcloudsql.instances.importcloudsql.instances.listcloudsql.users.create
ソース データベースの構成
ソース PostgreSQL データベースを構成する手順は次のとおりです。
- インスタンスに移行専用のユーザー アカウントを作成します。
- Cloud SQL for PostgreSQL ソースについては、Cloud SQL ドキュメントの ユーザーを作成するをご覧ください。
- その他のソースについては、データベース プロバイダのドキュメントまたは PostgreSQL のドキュメントの ユーザーの作成と管理をご覧ください。
- 移行専用のユーザー アカウントに必要な権限を割り当てます。移行するデータベースごとに次のコマンドを実行します。
-- Grant the REPLICATION attribute ALTER ROLE MIGRATION_USER REPLICATION; -- Grant database-level permissions. -- Repeat for each database you want to migrate. GRANT CONNECT, CREATE ON DATABASE DATABASE_NAME TO MIGRATION_USER; -- Grant schema-level usage. -- Repeat for each schema in each database you want to migrate. GRANT USAGE ON SCHEMA SCHEMA_NAME TO MIGRATION_USER;
次のように置き換えます。
- MIGRATION_USER は、移行ユーザー アカウントの名前に置き換えます。
- DATABASE_NAME は、移行するデータベースの名前に置き換えます。
- SCHEMA_NAME は、移行するデータベースのスキーマの名前に置き換えます。
- 移行ユーザー アカウントには、移行するテーブルに対するオーナー権限が必要です。このレベルのアクセス権を付与するには、次のいずれかを行います。
- Cloud SQL for PostgreSQL 以外のソースの場合のみ: 移行アカウントに
SUPERUSERPostgreSQL ロールを割り当てます。 - すべてのソースの場合: テーブルを所有するユーザー グループに移行ユーザー アカウントを追加します。次のコマンドを実行します。
-- Grant table ownership. GRANT TABLE_OWNER_GROUP_NAME TO MIGRATION_USER;
次のように置き換えます。
- TABLE_OWNER_GROUP_NAME は、移行する各テーブルを所有するユーザー グループの名前に置き換えます。
- MIGRATION_USER は、移行ユーザー アカウントの名前に置き換えます。
- Cloud SQL for PostgreSQL 以外のソースの場合のみ: 移行アカウントに
- 主キーのないテーブルの場合: Database Migration Service は、変更データ キャプチャ(CDC)フェーズで主キーのないテーブルの
UPDATEオペレーションまたはDELETEオペレーションを複製しません。このようなオペレーションをレプリケーションに含める場合は、REPLICA IDENTITYを使用して主キーのないテーブルを変更します。ALTER TABLE TABLE_NAME REPLICA IDENTITY FULL; ALTER TABLE TABLE_NAME REPLICA IDENTITY USING INDEX INDEX_NAME;
次のように置き換えます。
- TABLE_NAME は、主キーのないテーブルの名前です。
- INDEX_NAME は、主キーのないテーブルの行を追跡できる一意のインデックスです。
- データベース フラグを使用してレプリケーション設定を構成します。
セルフマネージド ソース
データベース フラグの変更を保存するには、データベースを完全に再起動する必要があります。次の例では、SQL クエリを使用してフラグ値を変更します。SQL クエリを直接実行できない場合は、これらのフラグを変更する手順について、プロバイダのドキュメントをご覧ください。
wal_levelパラメータをlogicalに設定します。次のコマンドを実行します。ALTER SYSTEM SET wal_level = 'logical';
wal_sender_timeoutパラメータを0に設定します。この値は、非アクティブなレプリケーション接続を終了するために使用するタイムアウト メカニズムを無効にします。次のコマンドを実行します。ALTER SYSTEM SET wal_sender_timeout = 0;
max_replication_slotsパラメータを使用して、レプリケーション スロットの最大数を構成します。このパラメータは、移行ジョブごとに移行するデータベースの数に、テーブル同期用の予約分を加えた値以上に設定する必要があります。たとえば、5 つのデータベースを移行し、移行元インスタンスに 2 つの移行ジョブが作成されている場合、レプリケーション スロットの数は
5 * 2 = 10以上にする必要があります。これに加えて、すでに使用されているレプリケーション スロットの数も必要です。このパラメータを設定するには、次のコマンドを実行します。
ここで、NUMBER_OF_SLOTS はレプリケーション スロットの最大数を表します。ALTER SYSTEM SET max_replication_slots = NUMBER_OF_SLOTS;
max_wal_sendersパラメータを、少なくともmax_replication_slotsと同じ値に、インスタンスですでに使用されている送信者の数を加えた値に構成します。たとえば、
max_replication_slotsパラメータが10に設定されていて、すでに 2 つの送信者を使用している場合、同時に実行される WAL 送信者プロセスの数は10 + 2 = 12になります。このパラメータを設定するには、次のコマンドを実行します。
ここで、NUMBER_OF_SENDERS は、同時に実行される WAL 送信者プロセスの数を表します。ALTER SYSTEM SET max_wal_senders = NUMBER_OF_SENDERS;
max_worker_processesは、移行するデータベースの数と、インスタンスですでに使用されているmax_worker_processesの数の合計以上に設定します。このパラメータを設定するには、次のコマンドを実行します。 ここで、NUMBER_OF_PROCESSES は移行されるデータベースの数を表します。ALTER SYSTEM SET max_worker_processes = NUMBER_OF_PROCESSES;
Cloud SQL for PostgreSQL ソース
Cloud SQL ソースの場合、 Google Cloud コンソールでデータベース フラグを構成します。設定を有効にするには、データベース フラグを変更した後にインスタンスを再起動する必要があります。Cloud SQL でデータベース フラグを設定する方法については、Cloud SQL ドキュメントの データベース フラグを構成するをご覧ください。
cloudsql.logical_decodingフラグをonに設定します。このフラグを有効にすると、設定を有効にするためにインスタンスの再起動が必要になります。wal_sender_timeoutパラメータを0に設定します。この値は、非アクティブなレプリケーション接続を終了するために使用するタイムアウト メカニズムを無効にします。max_replication_slotsパラメータを使用して、レプリケーション スロットの最大数を構成します。このパラメータは、移行ジョブごとに移行するデータベースの数に、テーブル同期用の予約分を加えた値以上に設定する必要があります。たとえば、5 つのデータベースを移行し、移行元インスタンスに 2 つの移行ジョブが作成されている場合、レプリケーション スロットの数は
5 * 2 = 10以上にする必要があります。これに、すでに使用されているレプリケーション スロットの数を加えます。max_wal_sendersパラメータを、少なくともmax_replication_slotsと同じ値に、インスタンスですでに使用されている送信者の数を加えた値に構成します。たとえば、
max_replication_slotsパラメータが10に設定されていて、すでに 2 つの送信者を使用している場合、同時に実行される WAL 送信者プロセスの数は10 + 2 = 12になります。max_worker_processesは、移行するデータベースの数と、インスタンスですでに使用されているmax_worker_processesの数の合計以上に設定します。
クイック スタート移行を作成して実行する
コンソール
Google Cloud コンソールを使用してクイックスタート移行を作成して実行するには、次の操作を行います。
- Google Cloud コンソールで、[使ってみる] ページに移動します。
- [ソースエンジン] メニューで [PostgreSQL] を選択します。
- [移行先エンジン] メニューで、[Cloud SQL for PostgreSQL] を選択します。
[クイック スタート PostgreSQL 移行の紹介] セクションが表示されます。
- [クイック スタート PostgreSQL 移行の紹介] セクションで、[移行を開始] をクリックします。
[Cloud SQL for PostgreSQL への移行] ページが開きます。
- [移行を構成する] セクションで、次の操作を行います。
- [宛先リージョン] メニューから、宛先 Cloud SQL インスタンスのリージョンを選択します。
- [移行接頭辞] ボックスに、クイックスタート移行用に作成されたすべての移行エンティティ(接続プロファイル、プライベート接続構成、ネットワーク アタッチメントとそのサブネット、移行ジョブ)の名前に追加される、わかりやすい文字列を入力します。
- [接続タイプ] メニューから、Database Migration Service が移行元データベースに接続する方法を選択します。
- プライベート IP: Private Service Connect インターフェースを使用してプライベート ネットワーク経由で接続します。[構成タイプ] メニューから、次のいずれかを選択します。
- 既存の接続構成: ネットワーク アタッチメントと、Private Service Connect インターフェース メソッドを使用するプライベート接続構成がすでにある場合は、このオプションを選択します。このオプションは、以前にクイックスタート移行を使用し、同じネットワーキング リソースを再利用する場合に最適です。
- 新しい接続構成: このオプションを選択すると、ソース データベースの VPC ネットワークに新しいネットワーク アタッチメントとネットワーク アタッチメント サブネットが作成されます。プライベート接続構成は、宛先インスタンスと同じプロジェクトに作成されます。
- パブリック IP: 専用の送信静的パブリック IP アドレスを使用して、公共のインターネット経由で接続します。移行先のプロジェクトとリージョンにパブリック IP 接続構成がすでに存在する場合、Database Migration Service はそれを再利用します。それ以外の場合、Database Migration Service は新しいパブリック IP 接続構成を作成し、続行すると送信 IP アドレスを生成します。
- プライベート IP: Private Service Connect インターフェースを使用してプライベート ネットワーク経由で接続します。[構成タイプ] メニューから、次のいずれかを選択します。
- [続行] をクリックします。ネットワーキング リソースの作成を確認するメッセージが表示されたら、[構成して続行] をクリックします。
- [ソースを接続] セクションで、次の操作を行います。
- 前の手順で [パブリック IP] を選択した場合は、 Google Cloud コンソールに表示された送信 IP アドレスをコピーし、インバウンド ファイアウォール ルールまたは IP 許可リストのエントリとして移行元ネットワーク(
pg_hba.confやクラウド プロバイダのセキュリティ グループなど)に追加して、Database Migration Service が接続できるようにします。 - ソース データベースのホスト名または IP アドレスを入力します。[プライベート IP] を選択した場合は、ソース VPC ネットワークから到達可能なプライベート IP アドレスを入力します。[パブリック IP] を選択した場合は、ソース データベースのパブリック IP アドレスを入力します。
- ホストへのアクセスに使用するポートを入力します。デフォルトの PostgreSQL ポートは
5432です。 - 移行元データベースの専用移行アカウントのユーザー名とパスワードを入力します。
- [暗号化タイプ] メニューから、次のいずれかを選択します。
- なし: ソース データベースで SSL / TLS 暗号化接続が必要ない場合。
- 必須: ソース データベースで SSL / TLS 暗号化接続が必要な場合。このオプションでは、証明書の検証は必要ありません。
- [移行するデータベース] メニューで、[カスタマイズ] をクリックします。サイドパネルを使用して、Cloud SQL に移行するデータベースのみを選択します。
- [続行] をクリックします。
- 前の手順で [パブリック IP] を選択した場合は、 Google Cloud コンソールに表示された送信 IP アドレスをコピーし、インバウンド ファイアウォール ルールまたは IP 許可リストのエントリとして移行元ネットワーク(
- [宛先を構成する] セクションで、新しい宛先インスタンスを作成するか、既存の宛先インスタンスを選択します。
新しいインスタンス
新しい宛先インスタンスを作成する場合は、次の操作を行います。
- [移行先インスタンスのタイプ] メニューから、[新しいインスタンス] を選択します。
Database Migration Service は、新しいインスタンスにデフォルトの Cloud SQL 構成を使用します。[カスタマイズ] をクリックして、マシンタイプ、ゾーンの可用性、データ保護設定などのインスタンス機能を調整します。インスタンス構成の詳細については、Cloud SQL ドキュメントの インスタンスの作成をご覧ください。
- [パスワード] フィールドに、デフォルトの
postgres管理者ユーザーのパスワードを入力します。Database Migration Service は、このユーザーとして接続してデータを移行します。
既存のインスタンス
データベースは、既存のインスタンスに移行できます。宛先インスタンスにプライベート IP が構成されていること(Private Service Connect、プライベート サービス アクセス、またはその両方を使用)、mTLS 接続が適用されていないことを確認します。次のように対応します。
- [移行先インスタンスのタイプ] メニューから、[既存のインスタンス] を選択します。
- [既存のインスタンス ID] メニューから、インスタンス ID を選択します。
- [移行先インスタンスのタイプ] メニューから、[新しいインスタンス] を選択します。
- [移行を開始] をクリックします。
Database Migration Service が移行ジョブを作成し、移行プロセスを開始します。移行の進行状況は、Database Migration Service の移行ジョブの詳細でモニタリングできます。詳細については、 移行ジョブを管理するをご覧ください。
gcloud
gcloud CLI を使用してクイックスタート移行を作成して実行するには、次の操作を行います。
-
ソース データベースへの接続を構成します。
ソース データベースがプライベート IP(Private Service Connect)を使用しているか、パブリック IP を使用しているかに基づいて、タブを選択します。プライベート IP(Private Service Connect)
Private Service Connect を使用して接続するには、ネットワーク アタッチメントとプライベート接続を構成します。
-
ネットワーク アタッチメントを構成する: 新しいネットワーク アタッチメントを作成するか、既存のネットワーク アタッチメントを再利用するかを決定します。ソース データベースのプライベート IP に到達できるネットワークにネットワーク アタッチメントが必要です。
- 新しいネットワーク アタッチメントを作成する場合は、次のコマンドを実行します(クリックすると詳細が表示されます)。
gcloud compute network-attachments create後述のコマンドデータを使用する前に、次のように置き換えます。
- NETWORK_ATTACHMENT は、作成するネットワーク アタッチメントの名前に置き換えます。
- REGION は、ネットワーク アタッチメントのリージョンに置き換えます。
- DEST_PROJECT_ID は、宛先プロジェクトのプロジェクト ID に置き換えます。
- SOURCE_PROJECT_ID: ソース ネットワークが存在するプロジェクトの ID。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud compute network-attachments create NETWORK_ATTACHMENT \ --region=REGION \ --connection-preference=ACCEPT_MANUAL \ --producer-accept-list=DEST_PROJECT_ID \ --subnets=default \ --project=SOURCE_PROJECT_ID
Windows(PowerShell)
gcloud compute network-attachments create NETWORK_ATTACHMENT ` --region=REGION ` --connection-preference=ACCEPT_MANUAL ` --producer-accept-list=DEST_PROJECT_ID ` --subnets=default ` --project=SOURCE_PROJECT_ID
Windows(cmd.exe)
gcloud compute network-attachments create NETWORK_ATTACHMENT ^ --region=REGION ^ --connection-preference=ACCEPT_MANUAL ^ --producer-accept-list=DEST_PROJECT_ID ^ --subnets=default ^ --project=SOURCE_PROJECT_ID
- 既存のネットワーク アタッチメントを再利用する場合は、次のステップに進みます。
- 新しいネットワーク アタッチメントを作成する場合は、次のコマンドを実行します(クリックすると詳細が表示されます)。
-
Database Migration Service テナント プロジェクトにネットワーク アタッチメントへのアクセスを許可する: ネットワーク アタッチメントは、Database Migration Service テナント プロジェクトからの接続を許可する必要があります。次の手順を行います。
- プライベート接続の作成をドライランで実行して、Database Migration Service のテナント プロジェクト ID を取得します(クリックして展開)。
gcloud database-migration private-connections create --validate-only後述のコマンドデータを使用する前に、次のように置き換えます。
- PRIVATE_CONN は、プライベート接続リソースの名前に置き換えます。
- REGION は、プライベート接続のリージョンに置き換えます。
- NETWORK_ATTACHMENT_URI は、ネットワーク アタッチメントの URI に置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration private-connections create PRIVATE_CONN \ --region=REGION \ --network-attachment=NETWORK_ATTACHMENT_URI \ --display-name=PRIVATE_CONN \ --format="value(metadata.metadata.tenant_project_id)" \ --validate-only
Windows(PowerShell)
gcloud database-migration private-connections create PRIVATE_CONN ` --region=REGION ` --network-attachment=NETWORK_ATTACHMENT_URI ` --display-name=PRIVATE_CONN ` --format="value(metadata.metadata.tenant_project_id)" ` --validate-only
Windows(cmd.exe)
gcloud database-migration private-connections create PRIVATE_CONN ^ --region=REGION ^ --network-attachment=NETWORK_ATTACHMENT_URI ^ --display-name=PRIVATE_CONN ^ --format="value(metadata.metadata.tenant_project_id)" ^ --validate-only
返されたテナント プロジェクト ID を保存して、次のコマンドで使用します。
- Database Migration Service テナント プロジェクトと宛先プロジェクトがネットワーク アタッチメントに接続できるようにします(クリックして展開)。
gcloud compute network-attachments update後述のコマンドデータを使用する前に、次のように置き換えます。
- NETWORK_ATTACHMENT は、ネットワーク アタッチメントの名前に置き換えます。
- REGION はリージョンに置き換えます。
- DEST_PROJECT_ID は、宛先プロジェクトのプロジェクト ID に置き換えます。
- DMS_TENANT_ID は、取得した Database Migration Service テナント プロジェクト ID に置き換えます。
- SOURCE_PROJECT_ID: ソース ネットワークが存在するプロジェクトの ID。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud compute network-attachments update NETWORK_ATTACHMENT \ --region=REGION \ --producer-accept-list=DEST_PROJECT_ID,DMS_TENANT_ID \ --project=SOURCE_PROJECT_ID
Windows(PowerShell)
gcloud compute network-attachments update NETWORK_ATTACHMENT ` --region=REGION ` --producer-accept-list=DEST_PROJECT_ID,DMS_TENANT_ID ` --project=SOURCE_PROJECT_ID
Windows(cmd.exe)
gcloud compute network-attachments update NETWORK_ATTACHMENT ^ --region=REGION ^ --producer-accept-list=DEST_PROJECT_ID,DMS_TENANT_ID ^ --project=SOURCE_PROJECT_ID
- プライベート接続の作成をドライランで実行して、Database Migration Service のテナント プロジェクト ID を取得します(クリックして展開)。
-
Database Migration Service のプライベート接続リソースを作成する: 次のコマンドを実行します(クリックして展開)。
gcloud database-migration private-connections create後述のコマンドデータを使用する前に、次のように置き換えます。
- PRIVATE_CONN は、プライベート接続リソースの名前に置き換えます。
- REGION は、プライベート接続のリージョンに置き換えます。
- NETWORK_ATTACHMENT_URI は、ネットワーク アタッチメントの URI に置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration private-connections create PRIVATE_CONN \ --region=REGION \ --network-attachment=NETWORK_ATTACHMENT_URI \ --display-name=PRIVATE_CONN
Windows(PowerShell)
gcloud database-migration private-connections create PRIVATE_CONN ` --region=REGION ` --network-attachment=NETWORK_ATTACHMENT_URI ` --display-name=PRIVATE_CONN
Windows(cmd.exe)
gcloud database-migration private-connections create PRIVATE_CONN ^ --region=REGION ^ --network-attachment=NETWORK_ATTACHMENT_URI ^ --display-name=PRIVATE_CONN
パブリック IP
パブリック IP アドレスを使用してソース データベースに接続するには、次の操作を行います。
-
予約済みのパブリック IP を使用してプライベート接続を作成する。
次のコマンドを実行します(クリックして展開)。gcloud database-migration private-connections createこのサンプルでは、オプションの
--no-asyncフラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-asyncフラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describeコマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。後述のコマンドデータを使用する前に、次のように置き換えます。
- CONNECTION_ID は、プライベート接続の ID に置き換えます。
- REGION は、プライベート接続を作成する Google Cloud リージョンに置き換えます。
- DISPLAY は、プライベート接続のわかりやすい表示名に置き換えます。
- 省略可:
--reserved-public-ipフラグを--reserved-public-ip-nat-ips-countに置き換えて、Database Migration Service が接続に使用する複数の専用パブリック IP アドレスを予約できます。最大10個の IP アドレスを予約できます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration private-connections create \ CONNECTION_ID \ --region=REGION \ --display-name="DISPLAY" \ --reserved-public-ip \ --no-async
Windows(PowerShell)
gcloud database-migration private-connections create ` CONNECTION_ID ` --region=REGION ` --display-name="DISPLAY" ` --reserved-public-ip ` --no-async
Windows(cmd.exe)
gcloud database-migration private-connections create ^ CONNECTION_ID ^ --region=REGION ^ --display-name="DISPLAY" ^ --reserved-public-ip ^ --no-async
-
予約済みのパブリック IP アドレスを取得します。
次のコマンドを実行します(クリックして展開)。gcloud database-migration connection-profiles fetch-static-ips後述のコマンドデータを使用する前に、次のように置き換えます。
- REGION は、プライベート接続の Google Cloud リージョンに置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration connection-profiles fetch-static-ips \ REGION \ --fetch-reserved-public-ips
Windows(PowerShell)
gcloud database-migration connection-profiles fetch-static-ips ` REGION ` --fetch-reserved-public-ips
Windows(cmd.exe)
gcloud database-migration connection-profiles fetch-static-ips ^ REGION ^ --fetch-reserved-public-ips
-
移行元データベースで予約済み IP アドレスを許可リストに登録します。
前の手順で取得した IP アドレスを、移行元データベースの受信許可リスト(pg_hba.conf構成、クラウド プロバイダのセキュリティ グループ、ネットワーク ファイアウォール ルールなど)に追加して、Database Migration Service が接続を確立できるようにします。
-
-
ソース接続プロファイルを作成します。
次のコマンドを実行します(クリックして展開)。gcloud database-migration connection-profiles create postgresqlこのサンプルでは、オプションの
--no-asyncフラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-asyncフラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describeコマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。後述のコマンドデータを使用する前に、次のように置き換えます。
- SOURCE_CONN_ID は、ソース接続プロファイル ID に置き換えます。
- REGION は、接続プロファイルを保存するリージョンに置き換えます。
- SOURCE_PRIVATE_IP は、ソース データベースのプライベート IP アドレスに置き換えます。
- SOURCE_PORT は、ソース データベースのポートに置き換えます(デフォルトは 5432)。
- SOURCE_USER は、ソース データベースの移行ユーザーのユーザー名に置き換えます。
- SOURCE_PASSWORD は、移行元データベースの移行ユーザーのパスワードに置き換えます。
- PRIVATE_CONN は、プライベート接続リソースの名前に置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration connection-profiles create postgresql \ SOURCE_CONN_ID \ --region=REGION \ --role=SOURCE \ --host=SOURCE_PRIVATE_IP \ --port=SOURCE_PORT \ --username=SOURCE_USER \ --password=SOURCE_PASSWORD \ --private-connection=PRIVATE_CONN \ --no-async
Windows(PowerShell)
gcloud database-migration connection-profiles create postgresql ` SOURCE_CONN_ID ` --region=REGION ` --role=SOURCE ` --host=SOURCE_PRIVATE_IP ` --port=SOURCE_PORT ` --username=SOURCE_USER ` --password=SOURCE_PASSWORD ` --private-connection=PRIVATE_CONN ` --no-async
Windows(cmd.exe)
gcloud database-migration connection-profiles create postgresql ^ SOURCE_CONN_ID ^ --region=REGION ^ --role=SOURCE ^ --host=SOURCE_PRIVATE_IP ^ --port=SOURCE_PORT ^ --username=SOURCE_USER ^ --password=SOURCE_PASSWORD ^ --private-connection=PRIVATE_CONN ^ --no-async
-
宛先接続プロファイルを作成します。
新しい Cloud SQL インスタンスに移行するか、既存の Cloud SQL インスタンスに移行するかに応じて、タブを選択します。新しいインスタンス
クイックスタート移行に新しい移行先インスタンスを使用するには、まず Cloud SQL Google Cloud CLI でインスタンスを作成してから、移行先接続プロファイルを作成します。手順は次のとおりです。
-
インスタンスを作成するCloud SQL と Google Cloud CLI を使用します。
移行先インスタンスがプライベート IP(プライベート サービス アクセスを使用)で構成されているか、Private Service Connect(
--enable-private-service-connectフラグなど)が有効になっていることを確認します。プライベート IP を使用せずに構成された宛先はサポートされていません。 - 新しいインスタンスの宛先接続プロファイルを作成します。コマンドの詳細については、次のセクションを開いてください。
gcloud database-migration connection-profiles create postgresqlこのサンプルでは、オプションの
--no-asyncフラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-asyncフラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describeコマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。後述のコマンドデータを使用する前に、次のように置き換えます。
- DEST_CONN_ID は、宛先接続プロファイルの識別子に置き換えます。
- REGION は、接続プロファイルを保存するリージョンに置き換えます。このリージョンは、宛先インスタンスのリージョンと同じにする必要があります。
- DEST_INSTANCE は、事前に作成した移行先の Cloud SQL インスタンスの ID に置き換えます。
- DEST_USER は、移行先データベースの移行ユーザーのユーザー名に置き換えます。
- DEST_PASSWORD は、移行先データベースの移行ユーザーのパスワードに置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \ --region=REGION \ --cloudsql-instance=DEST_INSTANCE \ --username=DEST_USER \ --password=DEST_PASSWORD \ --role=DESTINATION \ --no-async
Windows(PowerShell)
gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ` --region=REGION ` --cloudsql-instance=DEST_INSTANCE ` --username=DEST_USER ` --password=DEST_PASSWORD ` --role=DESTINATION ` --no-async
Windows(cmd.exe)
gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ^ --region=REGION ^ --cloudsql-instance=DEST_INSTANCE ^ --username=DEST_USER ^ --password=DEST_PASSWORD ^ --role=DESTINATION ^ --no-async
次のようなレスポンスが返されます。
Waiting for connection profile [CONNECTION_PROFILE_ID] to be created with [OPERATION_ID] Waiting for operation [OPERATION_ID] to complete...done. Created connection profile CONNECTION_PROFILE_ID [OPERATION_ID]
既存のインスタンス
既存の移行先インスタンスに移行するには、事前に作成したインスタンスを指す接続プロファイルを作成します。次のコマンドを実行します(クリックして展開)。
gcloud database-migration connection-profiles create postgresqlこのサンプルでは、オプションの
--no-asyncフラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-asyncフラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describeコマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。後述のコマンドデータを使用する前に、次のように置き換えます。
- DEST_CONN_ID は、宛先接続プロファイルの識別子に置き換えます。
- REGION は、接続プロファイルを保存するリージョンに置き換えます。このリージョンは、宛先インスタンスのリージョンと同じにする必要があります。
- DEST_INSTANCE は、事前に作成した移行先の Cloud SQL インスタンスの ID に置き換えます。
- DEST_USER は、移行先データベースの移行ユーザーのユーザー名に置き換えます。
- DEST_PASSWORD は、移行先データベースの移行ユーザーのパスワードに置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \ --region=REGION \ --cloudsql-instance=DEST_INSTANCE \ --username=DEST_USER \ --password=DEST_PASSWORD \ --role=DESTINATION \ --no-async
Windows(PowerShell)
gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ` --region=REGION ` --cloudsql-instance=DEST_INSTANCE ` --username=DEST_USER ` --password=DEST_PASSWORD ` --role=DESTINATION ` --no-async
Windows(cmd.exe)
gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ^ --region=REGION ^ --cloudsql-instance=DEST_INSTANCE ^ --username=DEST_USER ^ --password=DEST_PASSWORD ^ --role=DESTINATION ^ --no-async
次のようなレスポンスが返されます。
Waiting for connection profile [CONNECTION_PROFILE_ID] to be created with [OPERATION_ID] Waiting for operation [OPERATION_ID] to complete...done. Created connection profile CONNECTION_PROFILE_ID [OPERATION_ID]
-
インスタンスを作成するCloud SQL と Google Cloud CLI を使用します。
移行先インスタンスがプライベート IP(プライベート サービス アクセスを使用)で構成されているか、Private Service Connect(
-
移行ジョブを作成します。
次のコマンドを実行します(クリックして展開)。gcloud database-migration migration-jobs createこのサンプルでは、オプションの
--no-asyncフラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-asyncフラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describeコマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。後述のコマンドデータを使用する前に、次のように置き換えます。
- MIGRATION_JOB_ID は、移行ジョブの ID に置き換えます。
- REGION は、移行ジョブを保存するリージョンに置き換えます。
- SOURCE_CONN_ID は、ソース接続プロファイルの ID に置き換えます。
- DEST_CONN_ID は、宛先接続プロファイルの識別子に置き換えます。
- DATABASES_LIST は、移行するデータベースのカンマ区切りのリストに置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration migration-jobs create \ MIGRATION_JOB_ID \ --region=REGION \ --type=CONTINUOUS \ --source=SOURCE_CONN_ID \ --destination=DEST_CONN_ID \ --use-postgres-native \ --postgres-max-additional-subscriptions=10 \ --databases-filter=DATABASES_LIST \ --no-async
Windows(PowerShell)
gcloud database-migration migration-jobs create ` MIGRATION_JOB_ID ` --region=REGION ` --type=CONTINUOUS ` --source=SOURCE_CONN_ID ` --destination=DEST_CONN_ID ` --use-postgres-native ` --postgres-max-additional-subscriptions=10 ` --databases-filter=DATABASES_LIST ` --no-async
Windows(cmd.exe)
gcloud database-migration migration-jobs create ^ MIGRATION_JOB_ID ^ --region=REGION ^ --type=CONTINUOUS ^ --source=SOURCE_CONN_ID ^ --destination=DEST_CONN_ID ^ --use-postgres-native ^ --postgres-max-additional-subscriptions=10 ^ --databases-filter=DATABASES_LIST ^ --no-async
次のようなレスポンスが返されます。
Waiting for migration job [MIGRATION_JOB_ID] to be created with [OPERATION_ID] Waiting for operation [OPERATION_ID] to complete...done. Created migration job MIGRATION_JOB_ID [OPERATION_ID]
-
移行ジョブを実行します。
移行ジョブを開始する(クリックして展開):gcloud database-migration migration-jobs startこのサンプルでは、オプションの
--no-asyncフラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドは完了するまでに時間がかかることがあります。--no-asyncフラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describeコマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。後述のコマンドデータを使用する前に、次のように置き換えます。
- MIGRATION_JOB_ID は、移行ジョブ ID に置き換えます。
識別子がわからない場合は、
gcloud database-migration migration-jobs listコマンドを使用して、特定のリージョン内のすべての移行ジョブを一覧表示し、その識別子を確認できます。 - REGION は、移行ジョブが保存されているリージョンの ID に置き換えます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud database-migration migration-jobs \ start MIGRATION_JOB_ID \ --region=REGION
Windows(PowerShell)
gcloud database-migration migration-jobs ` start MIGRATION_JOB_ID ` --region=REGION
Windows(cmd.exe)
gcloud database-migration migration-jobs ^ start MIGRATION_JOB_ID ^ --region=REGION
結果
このアクションは非同期で実行されます。そのため、このコマンドは、長時間実行オペレーションを表す Operation エンティティを返します。
done: false metadata: '@type': type.googleapis.com/google.cloud.clouddms.v1.OperationMetadata apiVersion: v1 createTime: '2024-02-20T12:20:24.493106418Z' requestedCancellation: false target: MIGRATION_JOB_ID verb: start name: OPERATION_ID
オペレーションが成功したかどうかを確認するには、返されたオペレーション オブジェクトをクエリするか、移行ジョブのステータスを確認します。
-
gcloud database-migration migration-jobs describeコマンドと MIGRATION_JOB_ID を使用して、移行ジョブのステータスを表示します。 -
gcloud database-migration operations describeコマンドに OPERATION_ID を指定して、オペレーション自体のステータスを確認します。
- MIGRATION_JOB_ID は、移行ジョブ ID に置き換えます。
移行を完了する
アプリケーションを新しい Cloud SQL インスタンスに切り替える場合は、次の手順に沿って移行を完了します。
- 移行元データベースに対するすべての書き込みオペレーションを停止します。読み取り専用モードに切り替えて、運用機能を維持できます。
- 移行ジョブをプロモートします。クイック スタート移行の場合、移行プロセス中も移行先インスタンスは書き込み可能なままです。移行ジョブをプロモートすると、レプリケーションのみが終了し、移行先インスタンスには影響しません。
- 省略可: 移行データの完全性を検証します。