チュートリアル: Azure portal を介して DMS (クラシック) を使用し、オンラインで PostgreSQL を Azure Database for PostgreSQL に移行する

Azure Database Migration Service を使用して、アプリケーションへのダウンタイムを最小限に抑えながら、データベースをオンプレミスの PostgreSQL インスタンスから Azure Database for PostgreSQL に移行することができます。 このチュートリアルでは、Azure Database Migration Service のオンライン移行アクティビティを使用して、listdb サンプル データベースを PostgreSQL 13.10 のオンプレミス インスタンスから Azure Database for PostgreSQL に移行します。

このチュートリアルでは、以下の内容を学習します。

  • pg_dump ユーティリティを使用して、サンプル スキーマを移行する。
  • Azure Database Migration Service のインスタンスを作成する。
  • Azure Database Migration Service で移行プロジェクトを作成する。
  • 移行を実行する。
  • 移行を監視する。
  • 一括移行を実行する。

Note

Azure Database Migration Service を使用してオンライン移行を実行するには、Premium 価格レベルに基づいてインスタンスを作成する必要があります。 移行プロセス中のデータの盗難を防ぐために、ディスクは暗号化します。

重要

最適な移行エクスペリエンスのために、ターゲット データベースと同じ Azure リージョンに Azure Database Migration Service のインスタンスを作成することをお勧めします。 リージョンや地域をまたいでデータを移動する場合、移行プロセスが遅くなり、エラーが発生する可能性があります。

前提条件

このチュートリアルを完了するには、以下を実行する必要があります。

  • PostgreSQL コミュニティ エディションをダウンロードしてインストールします。 ソースの PostgreSQL サーバーのバージョンは 9.4 以降である必要があります。 詳細については、サポートされる PostgreSQL データベース バージョンに関するページをご覧ください。

    また、ターゲットの Azure Database for PostgreSQL のバージョンは、オンプレミスの PostgreSQL バージョンと同じかそれ以降である必要があることに注意してください。 たとえば、PostgreSQL 12 は Azure Database for PostgreSQL 12 以降のバージョンに移行できますが、Azure Database for PostgreSQL 11 には移行できません。

  • Azure Database for PostgreSQL サーバーを作成します

  • Azure Resource Manager デプロイ モデルを使用して、Azure Database Migration Service 用の Microsoft Azure 仮想ネットワークを作成します。これで、ExpressRoute または VPN を使用したオンプレミスのソース サーバーとのサイト間接続を確立します。 仮想ネットワークの作成方法の詳細については、Virtual Network のドキュメントを参照してください。特に、詳細な手順が記載されたクイックスタートの記事を参照してください。

    Note

    仮想ネットワークのセットアップ中、Microsoft へのネットワーク ピアリングに ExpressRoute を使用する場合は、サービスのプロビジョニング先となるサブネットに、次のサービス エンドポイントを追加してください。

    • ターゲット データベース エンドポイント (SQL エンドポイント、Azure Cosmos DB エンドポイントなど)
    • ストレージ エンドポイント
    • サービス バス エンドポイント

    Azure Database Migration Service にはインターネット接続がないため、この構成が必要となります。

  • 仮想ネットワークのネットワーク セキュリティ グループ (NSG) の規則によって、ServiceBus、Storage、AzureMonitor の ServiceTag の送信ポート 443 がブロックされていないことを確認します。 仮想ネットワークの NSG トラフィックのフィルター処理の詳細については、ネットワーク セキュリティ グループによるネットワーク トラフィックのフィルター処理に関する記事を参照してください。

  • データベース エンジン アクセスのために Windows ファイアウォールを構成します。

  • Azure Database Migration Service がソース PostgreSQL サーバーにアクセスできるように Windows ファイアウォールを開きます。既定では TCP ポート 5432 です。

  • ソース データベースの前でファイアウォール アプライアンスを使用する場合は、Azure Database Migration Service が移行のためにソース データベースにアクセスできるように、ファイアウォール規則を追加することが必要な場合があります。

  • Azure Database for PostgreSQL のサーバーレベルのファイアウォール規則を作成して、Azure Database Migration Service がターゲット データベースにアクセスできるようにします。 Azure Database Migration Service に使用する仮想ネットワークのサブネット範囲を指定します。

  • postgresql.config ファイルで論理レプリケーションを有効にし、次のパラメーターを設定します。

    • wal_level = logical
    • max_replication_slots = [スロットの数]、5 スロットに設定することをお勧めします
    • max_wal_senders = [同時実行タスク数] - max_wal_senders パラメーターでは同時に実行できるタスクの数を設定します、10 タスクに設定することをお勧めします
  • ユーザーは、ソース データベースをホストするサーバー上でレプリケーション ロールを持っている必要があります。

重要

変更をターゲット データベースに確実に同期できるようにするには、既存のデータベース内のすべてのテーブルに主キーが必要です。

サンプル スキーマを移行する

テーブル スキーマ、インデックス、ストアド プロシージャなどのすべてのデータベース オブジェクトを完了するには、ソース データベースからスキーマを抽出し、データベースに適用する必要があります。

  1. pg_dump -s コマンドを使用して、データベースのスキーマ ダンプ ファイルを作成します。

    pg_dump -O -h hostname -U db_username -d db_name -s > your_schema.sql
    

    たとえば、listdb データベース用のスキーマ ダンプ ファイルを作成するには、次のようにします。

    pg_dump -O -h localhost -U postgres -d listdb -s -x > listdbSchema.sql
    

    pg_dump ユーティリティの使用方法の詳細については、 pg-dump チュートリアルの例を参照してください。

  2. ターゲット環境に空のデータベース (Azure Database for PostgreSQL) を作成します。

    データベースの接続と作成方法について、詳しくは「Azure portal を使用して Azure Database for PostgreSQL サーバーを作成する」の記事をご覧ください。

  3. スキーマ ダンプ ファイルを復元して作成したターゲット データベースに、スキーマをインポートします。

    psql -h hostname -U db_username -d db_name < your_schema.sql
    

    次に例を示します。

    psql -h mypgserver-20170401.postgres.database.azure.com  -U postgres -d migratedb < listdbSchema.sql
    

    注意

    移行サービスにより、外部キーの有効化/無効化が内部的に処理され、信頼性のある堅牢なデータ移行が確保されるようトリガーされます。 そのため、ターゲット データベース スキーマの変更は検討する必要はありません。

リソース プロバイダーの登録

Database Migration Service の最初のインスタンスを作成する前に、Microsoft.DataMigration リソース プロバイダーを登録します。

  1. Azure portal にサインインします。 サブスクリプションを検索して選択します。

    ポータルのサブスクリプションの表示

  2. Azure Database Migration Service のインスタンスを作成するサブスクリプションを選択してから、 [リソース プロバイダー] を選びます。

    リソース プロバイダーの表示

  3. 移行を検索してから、 [Microsoft.DataMigration][登録] を選択します。

    リソース プロバイダーの登録

Azure Database Migration Service インスタンスを作成する

  1. Azure portal メニューまたは [ホーム] ページで、 [リソースの作成] を選択します。 [Azure Database Migration Service] を検索して選択します。

    Azure Marketplace

  2. [Azure Database Migration Service] 画面で、 [作成] を選択します。

    Azure Database Migration Service インスタンスを作成する

    適切な [ソース サーバーの種類][ターゲット サーバーの種類] を選択し、[Database Migration Service (クラシック)] オプションを選択します。

    [Database Migration Service (クラシック) の選択] のシナリオ

  3. [移行サービスの作成] の [基本] 画面で、次の手順を実行します。

    • サブスクリプションを選択します。
    • 新しいリソース グループを作成するか、既存のリソース グループを選択します。
    • Azure Database Migration Service のインスタンスの名前を指定します。
    • Azure Database Migration Service のインスタンスを作成する場所を選択します。
    • サービス モードとして [Azure] を選択します。
    • 価格レベルを選択します。 コストと価格レベルの詳細については、価格に関するページを参照してください。

    Azure Database Migration Service インスタンスの基本設定を構成する

    • [次へ: ネットワーク] を選択します。
  4. [移行サービスの作成] の [ネットワーク] 画面で、次の手順を実行します。

    • 既存の仮想ネットワークを選択するか、新しく作成します。 この仮想ネットワークによって、Azure Database Migration Service に、ソース サーバーとターゲット インスタンスへのアクセスが提供されます。 Azure portal で仮想ネットワークを作成する方法の詳細については、「Azure portal を使用した仮想ネットワークの作成」を参照してください。

    Azure Database Migration Service インスタンスのネットワーク設定を構成する

    • [確認と作成] を選択して詳細を確認し、 [作成] を選択してサービスを作成します。

    • しばらくすると、Azure Database Migration Service のインスタンスが作成され、使用できるようになります。

    作成した Migration Service

移行プロジェクトを作成する

サービスが作成されたら、Azure portal 内でそのサービスを探して開き、新しい移行プロジェクトを作成します。

  1. Azure ポータルで、 [All services](すべてのサービス) を選択し、Azure Database Migration Service を検索して、Azure Database Migration Service を選択します。

    Azure Database Migration Service の検索のスクリーンショット。

  2. [Azure Database Migration Services] 画面で、作成した Azure Database Migration Service インスタンスの名前を検索し、インスタンスを選択してから、 [+ 新しい移行プロジェクト] を選びます。

    Azure Database Migration Service インスタンスの検索のスクリーンショット。

  3. [新しい移行プロジェクト] 画面で、プロジェクトの名前を指定し、 [ソース サーバーの種類] テキスト ボックスで [PostgreSQL] を選択して、 [ターゲット サーバーの種類] テキスト ボックスで [Azure Database for PostgreSQL] を選択します。

  4. [移行アクティビティの種類] セクションで、[オンライン データの移行] を選びます。

    新しい移行プロジェクトの作成のスクリーンショット。

    Note

    または、 [プロジェクトのみを作成します] を選択して移行プロジェクトを作成しておき、移行は後で実行することもできます。

  5. [アクティビティの作成と実行] を選び、Azure Database Migration Service を使いこなしてデータを移行します。

ソース詳細を指定する

  1. [ソースの追加に関する詳細] 画面で、ソース PostgreSQL インスタンスの接続の詳細を指定します。

    ソースの詳細の追加画面のスクリーンショット。

ターゲット詳細を指定する

  1. [ターゲットの詳細] 画面で、ターゲットの Azure Database for PostgreSQL - フレキシブル サーバー (事前プロビジョニングされたインスタンスで、pg_dump を使用してスキーマがデプロイされている) の接続の詳細を指定します。

    [ターゲットの追加の詳細] 画面のスクリーンショット。

  2. [次へ: データベースの選択] をクリックし、[データベースの選択] 画面で、移行すろソース データベースとターゲット データベースをマップします。

    ターゲット データベースにソース データベースと同じデータベース名が含まれている場合、Azure Database Migration Service では、既定でターゲット データベースが選択されます。

    [データベースとターゲットのマップ] 画面のスクリーンショット。

  3. [ 次へ: テーブルの選択] をクリックし、[テーブルの選択] 画面で、移行する必要のあるテーブルを選びます。

    [移行対象テーブルの選択] 画面のスクリーンショット。

  4. [次へ: 移行設定の構成] をクリックし、[移行設定の構成] 画面で既定値をそのまま使用します。

    [移行設定の構成] 画面のスクリーンショット。

  5. [移行の概要] 画面で、[アクティビティ名] テキスト ボックスに移行アクティビティの名前を指定します。概要をレビューして、ソースとターゲットの詳細が先ほど指定した内容と一致していることを確認します。

    [移行の概要] 画面のスクリーンショット。

移行を実行する

  • [移行の開始] を選択します。

    移行アクティビティ ウィンドウが表示され、アクティビティの [状態] が更新されて、 [バックアップが進行中です] と示されるはずです。

移行を監視する

  1. 移行アクティビティ画面で、移行の [状態][完了] になるまで [最新の情報に更新] を選択して表示を更新します。

    [移行の監視] 画面のスクリーンショット。

  2. 移行が完了したら、 [データベース名] で、特定のデータベースを選択して、データ全体の読み込みおよび増分データ同期操作の移行状態を取得します。

    注意

    データ全体の読み込み には初回の読み込みの移行状態が表示され、増分データ同期 には変更データ キャプチャ (CDC) の状態が表示されます。

    [移行の全体読み込み詳細] 画面のスクリーンショット。

    [移行の増分読み込み詳細] 画面のスクリーンショット。

一括移行を実行する

初回の全体の読み込みが完了すると、データベースは [一括準備完了] とマークされます。

  1. データベースの移行を完了する準備ができたら、 [一括で開始] を選択します。

  2. [保留中の変更] カウンターに 0 と表示されるまで待ってソース データベースへのすべての受信トランザクションが停止していることを確認し、 [確認] チェックボックスをオンにしてから [適用] を選択します。

    [一括移行完了] 画面のスクリーンショット。

  3. データベースの移行状態に [完了] と表示されたら、順序を再作成 (該当する場合) して、アプリケーションを Azure Database for PostgreSQL の新しいターゲット インスタンスに接続します。

次のステップ