移行元データベースと移行先データベースのプライベート IP アドレス間の接続を確立することで、プライベート ネットワーク経由でデータを移行できます。宛先データベースのプライベート IP アドレスを構成するには、VPC ピアリングを使用したプライベート サービス アクセスまたは Private Service Connect を使用します。
各接続方法にはそれぞれ異なる利点とトレードオフがあります。シナリオに最適なアプローチを選択してください。Cloud SQL のプライベート サービス アクセスと Private Service Connect の詳細については、Cloud SQL ドキュメントのプライベート IP の概要をご覧ください。
VPC ピアリングを使用して接続を構成する
VPC ピアリングは、VPC が相互に通信するように構成することで機能します。移行元が Cloud SQL または Compute Engine の同じ Google Cloud プロジェクトにある場合、これにより移行先が移行元と直接通信できるようになります。ソースが VPN 内にある場合(AWS や独自のオンプレミス VPN など)、ソース VPN と Google Cloud VPN が連携するように構成します。詳細については、 VPN を介して VPC を接続するをご覧ください。VPC のチェーンはサポートされていません。ソースが別の Google Cloud プロジェクトにある場合は、共有 VPC の概要で、複数のプロジェクトのリソースを共通の VPC ネットワークに接続して VPC ピアリングを行う方法を確認してください。
ソース データベース サーバーのファイアウォールは、Cloud SQL の宛先インスタンスが使用する VPC ネットワークのプライベート サービス接続に割り振られた内部 IP 範囲全体を許可するように構成する必要があります。
プライベート サービス アクセスに割り振られた内部 IP 範囲を確認するには:
コンソール
Google Cloud コンソールで [Virtual Private Cloud ネットワーク] ページを開きます。
使用する VPC ネットワークを選択します。
[プライベート サービス アクセス] > [サービスに割り当てられた IP 範囲] を選択します。
servicenetworking-googleapis-com によって作成された接続に関連付けられている内部 IP 範囲を見つけます。
gcloud
PROJECT_ID 変数は、Virtual Private Cloud ネットワークがあるプロジェクトのプロジェクト識別子に置き換えます。
gcloud compute addresses list \
--global \
--filter="purpose=VPC_PEERING" \
--project=PROJECT_ID
Compute Engine インスタンスとセルフマネージド インスタンスのソース構成
ソース データベースが同じ Virtual Private Cloud またはピアリングされた Virtual Private Cloud の Compute Engine インスタンスでホストされている場合:
割り当てられた IP 範囲から移行元データベース ポート(PostgreSQL の場合はデフォルトの
5432、MySQL の場合は3306)への上り(内向き)トラフィックを許可するファイアウォール ルールを Virtual Private Cloud ネットワークに作成します。gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --network=VPC_NETWORK_NAME \ --direction=INGRESS \ --priority=1000 \ --action=ALLOW \ --rules=tcp:5432 \ --source-ranges=ALLOCATED_PEERING_RANGE \ --target-tags=SOURCE_VM_TAG \ --project=PROJECT_ID次のように置き換えます。
- FIREWALL_RULE_NAME: ファイアウォール ルールの名前(例:
allow-cloudsql-dms-ingress)。 - VPC_NETWORK_NAME: ソース データベースが存在する Virtual Private Cloud ネットワークの名前。
- ALLOCATED_PEERING_RANGE: プライベート サービス アクセスに割り振られた内部 IP アドレス範囲(例:
10.102.0.0/16)。 - SOURCE_VM_TAG: 送信元 Compute Engine VM インスタンスに適用されるネットワーク タグ。
- PROJECT_ID: Virtual Private Cloud ネットワークを含むプロジェクトの ID。
- FIREWALL_RULE_NAME: ファイアウォール ルールの名前(例:
pg_hba.confファイルでクライアント認証を構成します。割り当てられた IP 範囲からの接続とレプリケーションを許可するように、移行元サーバーの/etc/postgresql/<version>/main/pg_hba.confを更新します。host all all ALLOCATED_PEERING_RANGE md5 host replication all ALLOCATED_PEERING_RANGE md5ALLOCATED_PEERING_RANGE は、プライベート サービス アクセスに割り振られた内部 IP アドレス範囲(
10.102.0.0/16など)に置き換えます。構成を再読み込みします。
sudo -u postgres psql -c "SELECT pg_reload_conf();"コマンドを実行するpostgresql.confでlisten_addresses構成を確認します。プロパティに内部インターフェースが含まれているか、'*'に設定されていることを確認します。listen_addresses = '*'
VPC ピアリングではプライベート サービス アクセスを使用します。これは、VPC ピアリングを使用するプロジェクトごとに 1 回構成する必要があります。private services access を確立したら、移行ジョブをテストして接続を確認します。
Database Migration Service のプライベート サービス アクセスを構成する
Database Migration Service インスタンスにプライベート IP を使用している場合は、Database Migration Service インスタンスに接続している、または接続する必要がある Google Cloud プロジェクトごとに、プライベート サービス アクセスを 1 回だけ構成する必要があります。
プライベート サービス アクセスを確立するには、compute.networkAdmin IAM ロールが必要です。ネットワークのプライベート サービス アクセスが確立されると、プライベート IP を使用するようにインスタンスを構成するために compute.networkAdmin IAM ロールは不要になります。
プライベート サービス アクセスでは、まず内部 IP アドレス範囲を割り振り、プライベート接続を作成してから、カスタムルートをエクスポートする必要があります。
割り振り範囲は、ローカル VPC ネットワークでは使用できない予約済みの CIDR ブロックです。プライベート接続を作成するときに、割り当てを指定します。プライベート接続は、VPC ネットワークを基盤となる(「サービス プロデューサー」)VPC ネットワークにリンクします。
プライベート接続を作成すると、VPC ネットワークとサービス プロデューサー ネットワークはサブネット ルートのみを交換します。VPC ネットワークのカスタムルートをエクスポートし、それらをサービス プロバイダのネットワークがインポートし、オンプレミス ネットワークにトラフィックを正しくルーティングできるようにする必要があります。
ピアリング構成は、別の VPC ネットワークに接続する意思を示すものです。それぞれのネットワークが相手側のネットワークを参照するピアリングを構成するまで、両方のネットワークは接続されません。相手側のネットワークでこちら側のネットワークとのピアリングが構成されると、両方のネットワークでピアリングの状態が ACTIVE に変わり、接続されます。相手側のネットワークで同じピアリング構成が行われていない場合、ピアリング状態は INACTIVE のままになります。これは、2 つのネットワークが接続されていないことを示します。
接続された 2 つのネットワークは常にサブネット ルートを交換します。ピアリングされたネットワークが静的と動的のカスタムルートをエクスポートするように構成されていれば、そのネットワークから必要に応じて両方のカスタムルートをインポートできます。
プライベート サービス アクセスの構成プロセスは、2 つの部分で構成されています。
- IP アドレス範囲の割り当て。この範囲にはすべてのインスタンスが含まれます。
- VPC ネットワークからサービス プロデューサー ネットワークへのプライベート接続を作成する。
IP アドレス範囲を割り振る
コンソール
- Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
- 使用する VPC ネットワークを選択します。
- [プライベート サービス接続] タブを選択します。
- [サービスに割り当てられた IP 範囲] タブを選択します。
- [IP 範囲の割り当て] をクリックします。
割り振られた範囲の [名前] には
google-managed-services-VPC_NETWORK_NAMEを指定します。VPC_NETWORK_NAMEは、接続する VPC ネットワークの名前です(google-managed-services-defaultなど)。[説明] は任意です。[割り当て] をクリックして、割り振る範囲を作成します。
gcloud
次のいずれかを行います。
アドレス範囲と接頭辞長(サブネット マスク)を指定するには、
addressesフラグとprefix-lengthフラグを使用します。たとえば、CIDR ブロック192.168.0.0/16を割り当てるには、アドレスに192.168.0.0を指定し、接頭辞長に16を指定します。gcloud compute addresses create google-managed-services-[VPC_NETWORK_NAME] \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.0.0 \ --prefix-length=16 \ --network=[VPC_NETWORK_NAME]接頭辞長(サブネット マスク)だけを指定するには、
prefix-lengthフラグを使用します。アドレス範囲を省略すると、 Google Cloudでは VPC ネットワークで使用されていないアドレス範囲が自動的に選択されます。次の例では、16ビットの接頭辞長を使用して、未使用の IP アドレス範囲を選択しています。gcloud compute addresses create google-managed-services-[VPC_NETWORK_NAME] \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --network=[VPC_NETWORK_NAME]
[VPC_NETWORK_NAME] は、使用する VPC ネットワークの名前(my-vpc-network など)に置き換えます。
次の例では、VPC ネットワーク my-vpc-network のリソースがプライベート IP を使用して Database Migration Service インスタンスに接続できるようにする IP 範囲を割り振っています。
gcloud compute addresses create google-managed-services-my-vpc-network \
--global \
--purpose=VPC_PEERING \
--prefix-length=16 \
--network=my-vpc-network \
--project=my-project
プライベート接続の作成
コンソール
- Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
- 使用する VPC ネットワークを選択します。
- [プライベート サービス接続] タブを選択します。
- [サービスへのプライベート接続] タブを選択します。
- ネットワークとサービス プロデューサーとの間にプライベート接続を作成するには、[接続の作成] をクリックします。
- [割り当て] で、他のサービス プロデューサーによって使用されていない 1 つ以上の既存の割り当て範囲を選択し、[OK] をクリックします。
- [接続] をクリックして接続を作成します。
gcloud
プライベート接続を作成します。
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=google-managed-services-[VPC_NETWORK_NAME] \ --network=[VPC_NETWORK_NAME] \ --project=[PROJECT_ID][VPC_NETWORK_NAME]は VPC ネットワークの名前に置き換え、[PROJECT_ID]は VPC ネットワークを含むプロジェクトの ID に置き換えます。このコマンドは、長時間実行オペレーションを開始し、オペレーション名を戻します。
オペレーションが成功したかどうかを確認します。
gcloud services vpc-peerings operations describe \ --name=[OPERATION_NAME][OPERATION_NAME]を、前の手順から返されたオペレーション名に置き換えます。
プライベート接続を作成するときに、複数の割り当て範囲を指定できます。たとえば、範囲が不足している場合は、割り振り範囲を追加で指定できます。サービスは指定されたすべての範囲内の IP アドレスを、指定された順序で使用します。
カスタムルートのエクスポート
既存の VPC ネットワーク ピアリング接続を更新して、ピア VPC ネットワークとの間でのカスタムルートのエクスポートまたはインポートに関する設定を変更します。
カスタムルートをインポートするのは、ピア ネットワークがカスタムルートをエクスポートしている場合のみです。ピア ネットワークでは、カスタムルートをインポートする場合にのみカスタムルートを受け取ります。
コンソール
- Google Cloud コンソールで、[VPC ネットワーク ピアリング] ページに移動します。
[VPC ネットワーク ピアリング] ページに移動 - 更新するピアリング接続を選択します。
- [編集] をクリックします。
- [カスタムルートをインポートする] または [カスタムルートのエクスポート] をオン / オフにして、カスタムルートの設定を更新します。
- [保存] をクリックします。
gcloud
ピアリング接続を更新して、カスタムルートのインポートまたはエクスポートに関する設定を変更します。
gcloud compute networks peerings update [PEERING-NAME] \
--network=[MY-LOCAL-NETWORK] \
[--[no-]import-custom-routes] \
[--[no-]export-custom-routes]
roles/servicenetworking.serviceAgent ロールの付与
gcloud beta services identity create \
--service=servicenetworking.googleapis.com \
--project=project-id
gcloud projects add-iam-policy-binding project-id \
--member="service-account-prefix@service-networking.iam.gserviceaccount.com" \
--role="roles/servicenetworking.serviceAgent"
Private Service Connect インターフェースを使用して接続を構成する
同種移行の場合、Cloud SQL は Private Service Connect インターフェースを使用して、Virtual Private Cloud ピアリング割り当てを消費せずにプライベート ネットワーク経由で接続を確立できます。この接続方法は、既存のインスタンスに移行する場合にのみ使用できます。
Private Service Connect インターフェースを使用するには、次の操作を行います。
Private Service Connect が有効になっている Cloud SQL インスタンスを作成します。Cloud SQL のドキュメントの Private Service Connect 対応インスタンスを作成するをご覧ください。
移行先インスタンスのアウトバウンド接続用に Private Service Connect を構成します。
移行元データベースが存在する Virtual Private Cloud ネットワークにネットワーク アタッチメントを作成します。ネットワーク アタッチメント用に予約するサブネット範囲は、RFC 1918 範囲内である必要があります。
gcloud compute network-attachments create NETWORK_ATTACHMENT_NAME \ --region=REGION \ --subnets=NETWORK_ATTACHMENT_SUBNET \ --connection-preference=ACCEPT_AUTOMATIC \ --project=PROJECT_ID次のように置き換えます。
- NETWORK_ATTACHMENT_NAME: ネットワーク アタッチメントの名前(例:
dms-psc-attachment)。 - REGION: サブネットと宛先 Cloud SQL インスタンスが存在するリージョン。
- NETWORK_ATTACHMENT_SUBNET: ネットワーク アタッチメント用に予約されたサブネットの名前。
- PROJECT_ID: Virtual Private Cloud ネットワークを含むプロジェクトの ID。
- NETWORK_ATTACHMENT_NAME: ネットワーク アタッチメントの名前(例:
ネットワーク アタッチメントを移行先の Cloud SQL インスタンスに割り当てます。詳細については、Cloud SQL ドキュメントのアウトバウンド接続を構成するをご覧ください。
セルフマネージド ソースの場合のみ: ソース データベースで、ネットワーク アタッチメント サブネットからの受信トラフィックが許可されていることを確認します。ファイアウォール ルールを確認します。ネットワーク アタッチメント CIDR からデータベース ポート 5432 への上り(内向き)を許可するファイアウォール ルールが存在することを確認します。
ソース インスタンスの
pg_hba.confで、ネットワーク アタッチメントに関連付けられたサブネットの CIDR の範囲からの接続を許可するエントリが存在することを確認します。ネットワーク アタッチメントに関連付けられているサブネットとその CIDR 範囲を確認するには、Virtual Private Cloud ドキュメントのネットワーク アタッチメントの説明とサブネットの説明をご覧ください。移行ジョブを作成するときに、接続方法として PSC インターフェースを選択します。