チュートリアル: 移行サービスを使用してオンプレミスまたは Azure VM でホストされた PostgreSQL から Azure Database for PostgreSQL に移行する
適用対象: Azure Database for PostgreSQL - フレキシブル サーバー
このチュートリアルでは、Azure portal と Azure CLI を使用して、オンプレミスまたは Azure 仮想マシン (VM) から Azure Database for PostgreSQL フレキシブル サーバーに PostgreSQL インスタンスを移行する方法について説明します。
Azure Database for PostgreSQL の移行サービスは、Azure portal と Azure CLI に統合されたフル マネージド サービスです。 これは、Azure Database for PostgreSQL フレキシブル サーバーへの移行を簡略化するように設計されています。
- Azure Database for PostgreSQL - フレキシブル サーバーを構成する
- 移行タスクを構成する
- 移行を監視する
- 移行の取り消し
- 移行後の処理
前提条件 (オフライン)
Azure Database for PostgreSQL の移行サービスを使用して移行を開始する前に、オフライン移行シナリオに適用される次の前提条件を満たすことが不可欠です。
ソース バージョンの確認
ソース PostgreSQL のバージョンは >= 9.5
である必要があります。 ソース PostgreSQL のバージョンが 9.5
より小さい場合は、移行前にソース PostgreSQL のバージョンを 9.5
以上にアップグレードします。
ターゲット設定
移行する前に、Azure Database for PostgreSQL を Azure で設定する必要があります。
Azure Database for PostgreSQL 用に選択された SKU は、互換性と適切なパフォーマンスを確保するために、ソース データベースの仕様に対応している必要があります。
新しい Azure Database for PostgreSQL を作成する方法の詳細については、次の「クイック スタート: サーバー の作成」リンクを参照してください。
ネットワークのセットアップ
移行中にソースとターゲットの間の接続を正常に行うためには、適切なネットワーク設定が不可欠です。 さまざまなシナリオでネットワーク接続を確立するのに役立つガイドを次に示します:
移行のネットワーク要件:
ExpressRoute/IPsec VPN/VPN トンネリング: オンプレミス/AWS ソースを Azure に接続する場合、セキュリティで保護されたデータ転送を容易にするために、ExpressRoute、IPsec VPN、または VPN トンネリングを設定することが必要になる場合があります。
VNET ピアリング: 2 つの異なる VNet 間に仮想ネットワーク ピアリングを確立して、直接ネットワーク接続を有効にします。これは、Azure VM と Azure Database for PostgreSQL の間の移行の前提条件です。
接続のシナリオ:
次の表は、ソースとターゲット間のネットワークの設定に役立ちます。
source | 移行先 | 接続に関するヒント |
---|---|---|
公開 | 公開 | ソースがターゲットのファイアウォール規則でホワイトリストに登録されている場合、他のアクションは必要ありません。 |
Private | Public | この構成はサポートされていません。データ転送には pg_dump/pg_restore を使用します。 |
パブリック | プライベート | ソースがターゲットのファイアウォール規則でホワイトリストに登録されている場合、他のアクションは必要ありません。 |
プライベート | プライベート | ソースとターゲットの間に ExpressRoute、IPsec VPN、VPN トンネリング、または仮想ネットワーク ピアリングを確立します。 |
プライベート | プライベート エンドポイント | この構成はサポートされていません。Microsoft サポートにお問い合わせください。 |
ネットワークに関するその他の考慮事項:
- pg_hba.conf 構成: ソースとターゲットの PostgreSQL インスタンス間の接続を容易にするには、pg_hba.conf ファイルを検証して変更する必要があります。 このファイルにはクライアント認証が含まれており、ターゲット PostgreSQL がソースに接続できるように構成する必要があります。 通常、pg_hba.conf ファイルを変更するには、ソース PostgreSQL インスタンスを再起動する必要があります。
Note
pg_hba.conf ファイルは、PostgreSQL インストールのデータ ディレクトリにあります。 ソース データベースがオンプレミスの PostgreSQL サーバーまたは Azure VM でホストされている PostgreSQL サーバーである場合は、このファイルを確認して構成する必要があります。 AWS RDS または同様のマネージド サービス上の PostgreSQL インスタンスの場合、pg_hba.conf ファイルに直接アクセスしたり、適用したりすることはできません。 代わりに、サービスの提供されるセキュリティとネットワーク アクセスの構成によってアクセスが制御されます。
ネットワークセットアップの詳細については、「Azure Database for PostgreSQL - フレキシブル サーバーの移行サービスのネットワーク ガイド」にアクセスしてください。
Extensions
拡張機能は、その機能を強化するために PostgreSQL に追加できる追加の機能です。 拡張機能は Azure Database for PostgreSQL でサポートされていますが、手動で有効にする必要があります。 拡張機能を有効にするには、次の手順に従います:
ソースの select コマンドを使用して、使用されているすべての拡張機能を一覧表示します -
select extname,extversion from pg_extension;
Azure Database for PostgreSQL の [サーバー パラメーター] ページで azure.extensions サーバー パラメーターを検索します。 PostgreSQL 内のソースにある拡張機能を有効にします。
パラメーターの変更を保存し、必要に応じて Azure Database for PostgreSQL を再起動して新しい構成を適用します。
リストに次のいずれかの拡張機能が含まれているかどうかを確認します。
- PG_CRON
- PG_HINT_PLAN
- PG_PARTMAN_BGW
- PG_PREWARM
- PG_STAT_STATEMENTS
- PG_AUDIT
- PGLOGICAL
- WAL2JSON
"はい" の場合は、サーバー パラメーター ページで shared_preload_libraries パラメーターを検索します。 このパラメーターは、サーバーの再起動時に事前に読み込まれる拡張ライブラリのセットを示します。
ユーザーと役割
Azure Database for PostgreSQL に移行する場合は、ユーザーとロールの移行には手動による介入が必要なので、個別に対処することが不可欠です:
ユーザーとロールの手動移行: ユーザーとそれに関連付けられているロールは、Azure Database for PostgreSQL に手動で移行する必要があります。 このプロセスを容易にするために、
--globals-only
フラグ付きのpg_dumpall
ユーティリティを使用して、ロールやユーザー アカウントなどのグローバル オブジェクトをエクスポートできます。<<username>>
を実際のユーザー名に、<<filename>>
を目的の出力ファイル名に置き換えて、次のコマンドを実行します:pg_dumpall --globals-only -U <<username>> -f <<filename>>.sql
スーパーユーザー ロールの制限: Azure Database for PostgreSQL では、スーパーユーザー ロールはサポートされていません。 そのため、スーパーユーザー特権を持つユーザーは、移行前にこれらの特権を削除する必要があります。 必要に応じてアクセス許可とロールを調整してください。
これらの手順に従うことで、スーパーユーザーの制限に関連する問題が発生することなく、ユーザー アカウントとロールが Azure Database for PostgreSQL に正しく移行することができます。
サーバー パラメーター
これらのパラメーターはターゲット環境に自動的に移行されないので手動で構成する必要があります。
Azure portal の [サーバー パラメーター] セクションにアクセスし、それに応じて値を手動で更新して、ソース PostgreSQL データベースのサーバー パラメーター値を Azure Database for PostgreSQL と照合します。
パラメーターの変更を保存し、必要に応じて Azure Database for PostgreSQL を再起動して新しい構成を適用します。
ターゲットで高可用性 (信頼性) と読み取りレプリカを無効にする
ターゲット環境で高可用性 (信頼性) と読み取りレプリカを無効にすることが不可欠です。 これらの機能は、移行が完了した後にのみ有効にする必要があります。
これらのガイドラインに従うと、HA と読み取りレプリカによって導入された変数を追加することなく、スムーズな移行プロセスを実現できます。 移行が完了し、データベースが安定したら、これらの機能を有効にして、Azure のデータベース環境の可用性とスケーラビリティを向上させることができます。
Azure portal を使用して移行できます。
移行タスクを構成する
移行サービスには、Azure portal に関する簡単なウィザード ベースのエクスペリエンスが付属しています。
Web ブラウザーを開き、ポータルに移動します。 資格情報を入力してサインインします。 既定のビューはサービス ダッシュボードです。
お使いの Azure Database for PostgreSQL フレキシブル サーバーに移動します。
フレキシブル サーバーの [概要] タブの左側のメニューで、下にスクロールして [移行] を選択します。
[作成] ボタンを選択して、オンプレミスまたは Azure VM からフレキシブル サーバーに移行します。
Note
移行サービスを初めて使用すると、最初の移行を開始するためのプロンプトが表示された空のグリッドが表示されます。
フレキシブル サーバー ターゲットへの移行が既に作成されている場合、グリッドには、試行された移行に関する情報が含まれるようになります。
ウィザードベースの一連のタブを移動して移行を実行するには、[作成] ボタンを選択します。
段取り
最初のタブは [セットアップ] タブです。
ユーザーは、移行に関連する複数の詳細 (移行名、ソース サーバーの種類、オプション、モードなど) を指定する必要があります。
移行名は、このフレキシブル サーバーへの移行ごとの一意識別子です。 このフィールドで使用できる文字は英数字のみで、ハイフン (-) 以外の特殊文字は使用できません。 名前はハイフンから開始できず、1 つのターゲット サーバーに対して一意である必要があります。 同じフレキシブル サーバー ターゲットへの 2 つの移行の名前を同じにすることはできません。
ソース サーバーの種類 - PostgreSQL ソースに応じて、Azure Database for PostgreSQL の単一サーバー、オンプレミス、Azure VM を選択できます。
移行オプション - 移行をトリガーする前に検証を実行できます。 次のどのオプションも選択できます
- [検証] - サーバーとデータベースがターゲットに移行できる状態になっていることを調べます。
- [移行] - 検証をスキップして移行を始めます。
- [検証と移行] - 移行をトリガーする前に検証を実行します。 検証エラーがない場合、移行がトリガーされます。
- 移行を実行する前に、[検証] または [検証して移行] オプション選択することは、常に事前移行検証を実行することをお勧めします。
事前移行の検証の詳細については、事前移行に関するページを参照してください。
- 移行モードでは、移行のモードを選択できます。 [オフライン] が既定のオプションです。
[次へ: ソースに接続] ボタンを選択します。
ソースに接続する
[ソースに接続] タブでは、データベースのソースである [セットアップ] タブで選択したソースに関連する詳細を指定するように求められます。
サーバー名 - ソース PostgreSQL インスタンスのホスト名または IP アドレスを指定します
ポート - ソース サーバーのポート番号
サーバー管理者ログイン名 - ソース PostgreSQL サーバーのユーザー名
パスワード - ソース PostgreSQL サーバーのパスワード
SSL モード - サポートされている値が優先されかつ必要です。 ソース PostgreSQL サーバーの SSL が OFF の場合は、SSLMODE=prefer を使用します。 ソース サーバーの SSL が ON の場合は、SSLMODE=require を使用します。 SSL 値は postgresql.conf ファイルで決定できます。
テスト接続 - ターゲットとソースの間の接続テストを実行します。 接続が成功すると、ユーザーは次の手順に進むことができます。ターゲットとソースの間のネットワークの問題を特定し、ソースのユーザー名/パスワードを確認する必要があります。 テスト接続では、ターゲットとソースの間の接続を確立するのに数分かかります。
テスト接続が成功したら、[次へ: 移行ターゲットの選択] ボタンを選択します。
ターゲット アプリに
[移行ターゲットの選択] タブには、サブスクリプション名、リソース グループ、サーバー名、場所、PostgreSQL バージョンなど、フレキシブル サーバーのメタデータが表示されます。
管理者ユーザー名 - ターゲット PostgreSQL サーバーの管理者ユーザー名
パスワード - ターゲット PostgreSQL サーバーのパスワード
テスト接続 - ターゲットとソースの間の接続テストを実行します。 接続が成功すると、ユーザーは次の手順に進むことができます。 それ以外の場合は、ターゲットとソースの間のネットワークの問題を特定し、ターゲットのユーザー名/パスワードを確認する必要があります。 テスト接続には、ターゲットとソースの間の接続を確立するのに数分かかります
テスト接続が成功したら、[次へ: 移行のデータベースの選択] を選択します
移行するデータベースを選択する
[移行するデータベースの選択] タブで、移行元の PostgreSQL サーバーから移行するユーザー データベースの一覧を選択できます。
データベースを選択したら、[次へ: 概要] を選択します。
まとめ
[概要] タブには、検証または移行を作成するためのソースとターゲットの詳細がすべてまとめられます。 詳細を確認し、[検証して移行の開始] ボタンを選択します。
移行を監視する
[検証して移行の開始] ボタンを選択後、数秒で検証または移行の作成が成功したことを示す通知が表示されます。 フレキシブル サーバーの [移行] ページに自動的にリダイレクトされます。 エントリは InProgress 状態で、PerformingPreRequisiteSteps サブ状態です。 ワークフローでは、移行インフラストラクチャを設定し、ネットワーク接続をチェックするのに 2~3 分かかります。
移行を表示するグリッドには、[名前]、[状態]、[移行モード]、[移行の種類]、[ソース サーバー]、[ソース サーバーの種類]、[データベース]、[期間]、[開始時刻] の列があります。 エントリは、開始日時の降順に表示され、最新のエントリが先頭に表示されます。 [更新] ボタンを使って、検証または移行の状態を最新の状態に更新できます。
移行の詳細
グリッドで移行の名前を選んで、関連する詳細を表示します。
[セットアップ] タブで、[検証して移行] として移行オプションを選択しました。 このシナリオでは、最初に検証が実行されてから移行が開始されます。 PerformingPreRequisiteSteps サブ状態が完了すると、ワークフローは Validation in Progress サブ状態になります。
検証にエラーがある場合、移行は Failed 状態になります。
検証がエラーなしで完了すると、移行が開始され、ワークフローは Migrating Data のサブストレートに移ります。
検証の詳細は、インスタンス レベルとデータベース レベルで使用できます。
- インスタンス レベルでの検証
- 接続チェック、ソース バージョン、つまり PostgreSQL バージョン >= 9.5、サーバー パラメーター チェックに関連する検証が含まれています。つまり、Azure Database for PostgreSQL - フレキシブル サーバーのサーバー パラメーターで拡張機能が有効になっている場合です。
- データベース レベルでの検証
- これには、フレキシブル サーバーである Azure Database for PostgreSQL での拡張機能と照合順序のサポートに関連する個々のデータベースの検証が含まれています。
移行の状態には、次のものがあります。
- InProgress: 移行インフラストラクチャのセットアップが進行中、または実際のデータ移行が進行中です。
- Canceled: 移行が取り消されたか削除されました。
- Failed: 移行は失敗しました。
- Validation Failed: 検証は失敗しました。
- Succeeded: 移行が成功し、完了しました。
- WaitingForUserAction: オンライン移行にのみ適用されます。 ユーザー アクションがカットオーバーを実行するのを待機しています。
移行のサブ状態には、次のものがあります。
- PerformingPreRequisiteSteps: データ移行のためのインフラストラクチャのセットアップが進行中です。
- Validation in Progress: 検証は進行中です。
- MigratingData: データ移行が進行中です。
- CompletingMigration: 移行が完了の最終段階にあります。
- Completed: 移行が完了しました。
- Failed: 移行に失敗しました。
考えられる検証サブ状態は次のとおりです:
- Failed: 検証に失敗しました。
- Succeeded: 検証が成功しました。
- Warning: 検証は警告にあります。 警告は、移行の計画時に覚えておく必要がある有益なメッセージです。
ポータルを使って移行を取り消す
進行中の検証または移行は取り消すことができます。 ワークフローを取り消すには、InProgress 状態である必要があります。 Succeeded または Failed 状態の検証または移行を取り消すことはできません。
- 検証を取り消すと、検証アクティビティはそれ以上行われなくなり、検証は Cancelled 状態になります。
- 移行を取り消すと、ターゲット サーバーでそれ以上移行アクティビティは行われなくなり、Cancelled 状態になります。 取り消しアクションでは、ターゲット サーバー上で移行サービスによって行われたすべての変更がロールバックされます。
移行後の処理
データベースを完了したら、ソースとターゲット間のデータを手動で検証し、ターゲット データベース内のすべてのオブジェクトが正常に作成されたことを確認する必要があります。
移行後、次のタスクを実行できます:
フレキシブル サーバー上のデータを確認し、ソース インスタンスの正確なコピーであることを確認します。
検証後、必要に応じてフレキシブル サーバーで高可用性オプションを有効にします。
アプリケーションのニーズに合わせてフレキシブル サーバーの SKU を変更します。 この変更には、データベース サーバーの再起動が必要です。
ソース インスタンスの既定値からサーバー パラメーターを変更する場合は、フレキシブル サーバーでこれらのサーバー パラメーターの値をコピーします。
タグ、アラート、ファイアウォール規則 (該当する場合) などの他のサーバー設定をソース インスタンスからフレキシブル サーバーにコピーします。
接続文字列がフレキシブル サーバーをポイントするように、アプリケーションに変更を加えます。
データベースのパフォーマンスを厳密に監視して、パフォーマンス チューニングが必要かどうかを確認します。