新しい移行先インスタンスへの移行ジョブを作成する

Database Migration Service で移行先インスタンスを作成すると、そのインスタンスは降格されず、読み取り専用モードで実行されませんが、移行プロセス中に特定のオペレーションを実行すると、移行エラーが発生する可能性があります。新しい宛先インスタンスに移行する際は、次の運用上の考慮事項に注意してください。

  • 移行中のデータに対する書き込みオペレーションを回避する: 移行先のインスタンスで、移行に含まれるテーブルまたはデータベースに対して書き込みオペレーション(INSERT、UPDATE、DELETE、DDL スキーマの変更など)を実行しないでください。このようなオペレーションを行うと、ソースから取得したデータとレプリケーションの競合が発生する可能性があります。
  • データベース ユーザーを管理する: 標準の psql コマンドを使用するか、 Google Cloud コンソールの Cloud SQL を使用して、いつでもデータベース ユーザーを作成して管理できます。詳細については、Cloud SQL ドキュメントのユーザーを管理するをご覧ください。
  • バックアップとリードレプリカ: 継続的なレプリケーション中は、自動バックアップとポイントインタイム リカバリ(PITR)が一時停止されます。移行ジョブがプロモートされるまで、移行先インスタンスから Cloud SQL リードレプリカを作成することはできません。

詳細については、既知の制限事項をご覧ください。

移行ジョブの作成には以下が含まれます。

  1. 移行ジョブの設定を定義します。
  2. ソース設定を定義し、移行するデータベースを選択する。
  3. 移行先の Cloud SQL データベース インスタンスの設定を定義し、インスタンスを作成します。
  4. 移行元データベースと移行先データベースのインスタンス間の接続を設定します。
  5. 移行ジョブをテストして、ジョブに指定した接続情報が有効であることを確認します。

新しい移行先インスタンスへの移行ジョブを作成する手順は次のとおりです。

コンソール

移行ジョブの設定を定義する

  1. Google Cloud コンソールで、[移行ジョブ] ページに移動します。

    [移行ジョブ] に移動する

  2. [移行ジョブを作成] をクリックします。

    移行ジョブ構成ウィザードのページが開きます。 このウィザードには、各構成手順を説明する複数のパネルが含まれています。

    移行ジョブの作成は、[保存して終了] をクリックすることで、いつでも一時停止できます。その時点までに入力したすべてのデータは、下書きの移行ジョブに保存されます。下書きの移行ジョブは後で完了できます。

  3. [開始] ページで、次の情報を入力します。
    1. 移行ジョブ名

      これは、移行ジョブの人が読める形式の名前です。この値は Google Cloud コンソールに表示されます。

    2. 移行ジョブ ID

      これは、移行ジョブの機械で読み取り可能な識別子です。この値は、Database Migration Service の Google Cloud CLI コマンドまたは API を使用して移行ジョブを操作するために使用します。

    3. [移行元データベース エンジン] リストから [PostgreSQL] を選択します。

      [移行先データベース エンジン] フィールドには、[Cloud SQL for PostgreSQL] が自動的に入力され、変更できません。

    4. 移行ジョブを保存するリージョンを選択します。

      Database Migration Service は完全にリージョンに依存するプロダクトです。つまり、移行に関連するすべてのエンティティ(移行元と移行先の接続プロファイル、移行ジョブ、移行先データベース)を 1 つのリージョンに保存する必要があります。Compute Engine インスタンスや App Engine アプリ、その他のサービスなど、データを必要とするサービスのロケーションに基づいてリージョンを選択します。宛先リージョンを選択すると、この選択は変更できません。

    5. 移行ジョブの種類([1 回限り] または [継続的])を指定します。
    6. 環境用に生成された前提条件を確認します。ソース データベースが適切に構成されていることを確認します。詳細については、ソース データベースを構成するをご覧ください。
  4. [保存して次へ] をクリックします。

ソース接続プロファイルに関する情報の指定

[ソースを定義する] ページで、次の操作を行います。

  1. [ソース接続プロファイル] プルダウン メニューから、ソース データベースの接続プロファイルを選択します(または、[接続プロファイルを作成] をクリックします。ソース接続プロファイルを作成するをご覧ください)。
  2. [並列処理構成をカスタマイズする] セクションで、[並列処理構成を表示] をクリックします。

    データダンプの並列処理の速度は、ソース データベースに誘発される負荷の量に関連しています。次の設定を使用できます。

    • 最適(推奨): ソース データベースへの負荷が最適な状態になり、バランスの取れたパフォーマンスが実現します。
    • 最大: ダンプ速度が最も速くなりますが、ソース データベースの負荷が増加する可能性があります。
    • 最小: ソース データベースに対して使用されるコンピューティング リソースの量は最小になりますが、ダンプ スループットが低下する可能性があります。

    並列処理の設定を調整する場合は、ソース データベースの max_replication_slots、max_wal_senders、max_worker_processes の各パラメータを必ず増やしてください。移行ジョブの作成の最後に移行ジョブテストを実行して、構成を確認できます。

  3. [保存して次へ] をクリックします。

移行先の Cloud SQL インスタンスを構成して作成する

  1. [移行先の定義] ページの [移行先インスタンスのタイプ] プルダウン メニューから、[新しいインスタンス] を選択します。関連するすべての設定を定義します。
    1. [移行先インスタンス ID] フィールドに、Cloud SQL インスタンスの識別子を入力するか、自動生成された識別子を使用します。

      識別子には、機密情報や個人を特定できる情報を含めないでください。インスタンス名にプロジェクト ID を含める必要はありません。この処理は必要に応じて自動的に行われます(ログファイルの場合など)。

    2. [パスワード] フィールドに、移行先の Cloud SQL インスタンスの英数字のパスワードを入力します。これは、インスタンスの postgres 管理者アカウントのパスワードです。

      手動でパスワードを入力するか、[生成] をクリックして Database Migration Service でパスワードを自動生成します。

    3. [データベースのバージョン] プルダウン メニューから、移行先インスタンスのデータベース バージョンを選択します。

      クロスバージョン移行サポートの詳細。

    4. 移行先インスタンスの Cloud SQL for PostgreSQL エディションを選択します。Cloud SQL for PostgreSQL Enterprise エディションと Cloud SQL for PostgreSQL Enterprise Plus エディションの 2 つのオプションがあります。

      Cloud SQL for PostgreSQL のエディションには、さまざまな機能、使用可能なマシンタイプ、料金が用意されています。Cloud SQL のドキュメントを参照して、ニーズに適したエディションを選択してください。詳細については、Cloud SQL for PostgreSQL エディションの概要をご覧ください。

    5. [リージョン] メニューには、[スタートガイド] ページで選択したリージョンと同じリージョンが表示されます。

      高可用性を確保するためにインスタンスを構成する場合は、[複数のゾーン(高可用性)] を選択します。プライマリ ゾーンとセカンダリ ゾーンの両方を選択できます。インスタンスの作成中にセカンダリ ゾーンが使用される場合は、次の条件が適用されます。

      • ゾーンのデフォルトは、プライマリ ゾーンは [すべて]、セカンダリ ゾーンは [すべて(プライマリを除く)] です。
      • プライマリ ゾーンとセカンダリ ゾーンの両方を指定する場合は、別々のゾーンにする必要があります。
    6. [接続] セクションで、宛先インスタンスにパブリック IP アドレスまたはプライベート IP アドレスを追加するかどうかを選択します。両方のタイプの IP アドレスを持つようにインスタンスを構成できますが、移行には少なくとも 1 つのタイプが必要です。次のいずれかを選択します。
      • VPC ピアリングまたはリバース SSH トンネルを使用して移行する場合は、[プライベート IP] を選択します。
        • プライベート IP 接続を有効にするには、追加のネットワーキング要件をすべて満たしていることを確認してください。

          プライベート IP の要件の詳細については、このセクションを開いてください。

          • Service Networking API が有効になっている。Service Networking API を有効にするには、 Google Cloud コンソールを使用します。
          • servicenetworking.services.addPeering IAM 権限が付与されている。
          • プロジェクトにプライベート サービス アクセスが構成されている。これには、compute.networkAdmin IAM ロールが必要です。
          • プロジェクトに、少なくとも 1 つの非レガシー VPC ネットワークまたは /vpc/docs/shared-vpc ネットワークがあります。
          • /vpc/docs/shared-vpc ネットワークを使用している場合は、次の操作も行う必要があります。
            • ホスト プロジェクトで Service Networking API を有効にします。
            • ユーザーをホスト プロジェクトに追加します。
            • ホスト プロジェクトでユーザーに compute.networkAdmin IAM ロールを付与します。
        • ピアリングする関連付けられた VPC ネットワークを選択します。VPC ピアリングを使用して移行元に接続する場合は、インスタンスが存在する VPC を選択します。
        • 選択した VPC にマネージド サービス ネットワークが構成されていない場合は、IP 範囲を選択して [接続] をクリックするか、自動的に選択された IP 範囲を使用して [割り振りと接続] をクリックします。
      • IP 許可リストを使用してインターネット経由で移行する場合は、[パブリック IP] を選択します。

        必要に応じて、[パブリック IP] で [承認済みネットワーク] フィールドをクリックし、ネットワークまたはプロキシを承認して Cloud SQL インスタンスに接続します。ネットワークは、指定したアドレスでのみ承認されます。Cloud SQL ドキュメントのパブリック IP を構成するをご覧ください。

      移行ジョブの接続は後の手順で構成します。使用可能なネットワーキング方法の詳細については、接続を構成するをご覧ください。

  2. Cloud SQL インスタンスのマシンタイプを選択します。PostgreSQL マシンタイプの詳細を確認する。
  3. Cloud SQL for PostgreSQL Enterprise Plus エディションの場合: 移行先データベースでデータ キャッシュ機能を使用する場合は、[データ キャッシュを有効にする] チェックボックスをオンにします。

    データ キャッシュは、Cloud SQL for PostgreSQL Enterprise Plus エディションのインスタンスで使用できるオプション機能です。この機能を使用すると、移行先データベースに高速ローカル ソリッド ステート ドライブが追加されます。この機能を使用すると、Cloud SQL に追加費用が発生する可能性があります。データ キャッシュの詳細については、Cloud SQL ドキュメントのデータ キャッシュの概要をご覧ください。

  4. Cloud SQL インスタンスのストレージ タイプを指定します。ソリッド ステート ドライブ(SSD)またはハードディスク ドライブ(HDD)のいずれかを選択できます。
  5. Cloud SQL インスタンスのストレージ容量(GB 単位)を指定します。

    ソース データベースのデータを処理するのに十分なストレージ容量がインスタンスにあることを確認します。この容量はいつでも増やすことができますが、減らすことはできません。

  6. (省略可)宛先インスタンスのデータ暗号化オプションまたはリソースラベルを構成します。

    このセクションを開いて、オプションの手順を確認してください。

    [オプションの構成を表示] をクリックして、次の操作を行います。

    1. ソースから宛先に移行されるデータの暗号化を管理するかどうかを指定します。デフォルトでは、データは Google Cloudが管理する鍵で暗号化されます。ご自身で暗号化を管理する場合は、顧客管理の暗号鍵(CMEK)を使用します。手順は次のとおりです。

      1. [顧客管理の暗号鍵(CMEK)を使用する] チェックボックスをオンにします。
      2. [顧客管理の鍵を選択] メニューから、CMEK を選択します。

      鍵が表示されない場合は、[鍵のリソース名を入力] をクリックして、使用する鍵のリソース名を入力します。鍵のリソース名の例: projects/my-project-name/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key。

    2. データベース サーバーに適用する必要なフラグを追加します。可能であれば、作成した移行先の Cloud SQL インスタンスのデータベース フラグが、移行元データベースのフラグと同じであることを確認します。PostgreSQL でサポートされているデータベース フラグの詳細を確認する。
    3. Cloud SQL インスタンスに固有のラベルを追加します。

      ラベルはインスタンスの整理に役立ちます。たとえば、コストセンターや環境別にラベルを整理できます。ラベルは請求書にも記載されるため、ラベル間で費用分布を確認できます。

  7. [宛先を作成して続行] をクリックします。 Database Migration Service が Cloud SQL 移行先インスタンスを作成しています。 この処理には数分かかることがあります。

移行元データベースと移行先データベースのインスタンス間の接続を設定する

[接続方法] プルダウン メニューから、ネットワーク接続方法を選択します。この方法により、新しく作成された Cloud SQL インスタンスとソース データベースとの接続方法が定義されます。新しいインスタンスに移行するための現在のネットワーク接続方法には、 IP 許可リスト、リバース SSH トンネル、VPC ピアリングがあります。

使用したい場合...方法
IP 許可リストのネットワーク接続方法 移行先インスタンスの送信 IP アドレスを指定する必要があります。作成した Cloud SQL インスタンスが高可用性インスタンスの場合は、プライマリ インスタンスとセカンダリ インスタンスの両方の送信 IP アドレスを含めます。
リバース SSH トンネル ネットワーク接続方法 トンネルをホストする Compute Engine VM インスタンスを選択する必要があります。

インスタンスを指定すると、移行元データベースと移行先データベースの間にトンネルを設定する手順を実行するスクリプトが提供されます。Google Cloud CLI でスクリプトを実行する必要があります。

ソース データベースと Google Cloudの両方に接続できるマシンからコマンドを実行します。

VPC ピアリング ネットワーク接続方法 移行元データベースが存在する VPC ネットワークを選択する必要があります。Cloud SQL インスタンスは、このネットワークに接続するように更新されます。

ネットワーク接続を選択して構成したら、[構成して続行] をクリックします。

移行データベースを構成する

移行元インスタンスからすべてのデータベースを移行することも、特定のデータベースのみを選択することもできます。移行先インスタンスには、移行対象として選択したデータベースと同じ名前のデータベースを含めることはできません。Database Migration Service でデータベース名の競合が発生すると、移行前に移行先で問題のあるデータベースが削除されます。

  1. [移行するデータベース] リストから、次のいずれかのオプションを選択します。
    • すべてのデータベース: ソースに存在するすべてのデータベースを選択します。
    • 特定のデータベース: ソースに存在するすべてのデータベースから特定のデータベースを選択できます。
  2. 特定のデータベースを移行する場合は、表示されるリストをフィルタして、Database Migration Service で移行先に移行するデータベースを選択します。

    リストが表示されず、データベース検出エラーが表示された場合は、[再読み込み] をクリックします。データベースの検出に失敗すると、ジョブはすべてのデータベースを移行します。移行ジョブの作成を続行し、後で接続エラーを修正できます。

  3. [保存して次へ] をクリックします。

移行ジョブをテスト、作成、実行する

この最後のステップでは、移行ジョブの設定、移行元、移行先、接続方法の概要を確認し、移行ジョブの設定の有効性をテストします。問題が発生した場合は、移行ジョブの設定を変更できます。すべての設定を編集できるわけではありません。

  1. [移行ジョブのテストと作成] ページで、[ジョブをテスト] をクリックします。

    テストに失敗した場合は、フローの適切な部分で問題に対処してから、再テストに戻ることができます。移行ジョブテストの失敗のトラブルシューティングについては、PostgreSQL の問題を診断するをご覧ください。

  2. 移行ジョブのテストが完了したら、[ジョブを作成して開始] をクリックして移行ジョブを作成し、すぐに開始します。または、[ジョブを作成] をクリックして、すぐに開始せずに移行ジョブを作成します。

    ジョブが作成時に開始されていない場合は、[移行ジョブ] ページで [開始] をクリックして開始できます。移行ジョブの開始時期に関係なく、移行先インスタンスの存在に対して組織に課金されます。

    移行が進行中です。移行ジョブを開始すると、Database Migration Service は最初の完全ダンプとレプリケーションを開始します。詳細については、既知の制限事項をご覧ください。

  3. 移行ジョブを確認するに進みます。

Google Cloud CLI

  1. 宛先接続プロファイルを作成します。
    Google Cloud CLI を使用して新しい移行先インスタンスに移行する場合は、1 回の操作で移行先インスタンスと接続プロファイルを作成します。
    次のコマンドを実行します(リンクをクリックして展開します)。

    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]
    
  2. 移行ジョブを作成します。
    VPC ピアリングまたはリバース SSH トンネル接続を使用する場合は、--peer-vpc、--vm、--vm-ip、--vm-port、--vpc などの必要なフラグを追加してください。詳細については、接続を構成すると Google Cloud CLI の例をご覧ください。
    次のコマンドを実行します(リンクをクリックして展開します)。

    gcloud database-migration migration-jobs create

    このサンプルでは、オプションの --no-async フラグを使用して、すべてのオペレーションが同期的に実行されるようにしています。そのため、一部のコマンドの完了に時間がかかることがあります。--no-async フラグをスキップして、コマンドを非同期で実行できます。その場合は、gcloud database-migration operations describe コマンドを使用して、オペレーションが成功したかどうかを確認する必要があります。

    後述のコマンドデータを使用する前に、次のように置き換えます。

    • MIGRATION_JOB_ID は、移行ジョブの機械で読み取り可能な識別子に置き換えます。この値は、Database Migration Service の Google Cloud CLI コマンドまたは API を使用して移行ジョブを操作するときに使用します。
    • REGION は、移行ジョブを保存するリージョン ID に置き換えます。
    • MIGRATION_JOB_NAME は、移行ジョブの人が読める形式の名前に置き換えます。この値は、 Google Cloud コンソールの Database Migration Service に表示されます。
    • SOURCE_CONNECTION_PROFILE_ID は、ソース接続プロファイルの機械で読み取り可能な識別子に置き換えます。詳細については、ソース接続プロファイルを作成するをご覧ください。
    • DESTINATION_CONNECTION_PROFILE_ID は、宛先接続プロファイルの機械で読み取り可能な識別子に置き換えます。
    • 省略可: Database Migration Service は、デフォルトで移行元のすべてのデータベースを移行します。特定のデータベースのみを移行する場合は、--databases-filter フラグを使用して、識別子をカンマ区切りのリストとして指定します。

      例: --databases-filter=my-business-database,my-other-database

      --databases-filter フラグを使用して作成した移行ジョブは、後で gcloud database-migration migration-jobs update コマンドを使用して編集できます。

    次のコマンドを実行します。

    Linux、macOS、Cloud Shell

    gcloud database-migration migration-jobs \
    create MIGRATION_JOB_ID \
      --no-async \
      --region=REGION \
      --display-name=MIGRATION_JOB_NAME \
      --source=SOURCE_CONNECTION_PROFILE_ID \
      --destination=DESTINATION_CONNECTION_PROFILE_ID \
      --type=CONTINUOUS

    Windows(PowerShell)

    gcloud database-migration migration-jobs `
    create MIGRATION_JOB_ID `
      --no-async `
      --region=REGION `
      --display-name=MIGRATION_JOB_NAME `
      --source=SOURCE_CONNECTION_PROFILE_ID `
      --destination=DESTINATION_CONNECTION_PROFILE_ID `
      --type=CONTINUOUS

    Windows(cmd.exe)

    gcloud database-migration migration-jobs ^
    create MIGRATION_JOB_ID ^
      --no-async ^
      --region=REGION ^
      --display-name=MIGRATION_JOB_NAME ^
      --source=SOURCE_CONNECTION_PROFILE_ID ^
      --destination=DESTINATION_CONNECTION_PROFILE_ID ^
      --type=CONTINUOUS

    次のようなレスポンスが返されます。

    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]