Azure Database for PostgreSQL を別のリージョンに再配置する

この記事では、リージョン ペアをレプリケーションと geo リストアに使用できない複数の地域にまたがる Azure Database for PostgreSQL、単一サーバー、フレキシブル サーバーの再配置ガイダンスについて説明します。

既存の Azure リソースを 1 つのリージョンから他のリージョンに移動する必要が生じる理由は多数存在します。 以下を行うことができます。

  • 新しい Azure リージョンの利点を活用する。
  • 特定のリージョンでしか利用できない機能やサービスをデプロイする。
  • 内部ポリシーやガバナンスの要件を満たす。
  • 会社の合併と買収に合わせた調整を行う
  • 容量計画の要件を満たす。

Azure Cosmos DB for PostgreSQL (旧称 Azure Database for PostgreSQL - Hyperscale (Citus)) を再配置する方法については、「Azure Cosmos DB for PostgreSQL の読み取りレプリカ」を参照してください。

ネイティブ レプリケーションでサポートされるリージョン ペアの概要については、「リージョン間レプリケーション」を参照してください。

前提条件

前提条件は、データを含む再デプロイにのみ適用されます。 データなしでデータベースを移動する場合は、「準備」をスキップできます。

  • データを含む PostgreSQL をあるリージョンから別のリージョンに再配置するには、バックアップおよび復元ツールを実行するための追加のコンピューティング リソースが必要です。 このガイドの例では、Ubuntu 20.04 LTS を実行している Azure VM を使用します。 コンピューティング リソースは次の条件を満たしている必要があります。
    • プライベート ネットワーク上で、またはファイアウォール規則に含めることによって、ソース サーバーとターゲット サーバーの両方にネットワーク アクセスできる。
    • ソース リージョンまたはターゲット リージョンのどちらかに配置されている。
    • 高速ネットワークを使用している (使用可能な場合)。
    • データベースの内容が中間ストレージに保存されず、論理バックアップ ツールの出力がターゲット サーバーに直接送信される。
  • Azure Database for PostgreSQL インスタンスの設計によっては、再配置の前に、次の依存リソースをターゲット リージョンにデプロイして構成する必要がある場合があります。

ダウンタイム

発生の可能性のあるダウンタイムを理解するには、「Azure 向けのクラウド導入フレームワーク: 再配置方法を選択する」を参照してください。

準備

まず、Resource Manager テンプレートをエクスポートします。 このテンプレートには、Automation 名前空間について記述する設定が含まれています。

  1. Azure portal にサインインします。

  2. [すべてのリソース] を選択してから、Automation リソースを選択します。

  3. [テンプレートのエクスポート] を選択します。

  4. [テンプレートのエクスポート] ページで [ダウンロード] を選択します。

  5. ポータルからダウンロードした .zip ファイルを見つけて、選択したフォルダーにそのファイルを解凍します。

    この zip ファイルには、テンプレートとテンプレートをデプロイするためのスクリプトから構成される .json ファイルが含まれています。

データなしで再デプロイする

  1. エクスポートされたテンプレート パラメーターを宛先リージョンに合わせて調整します。

重要

ターゲット サーバーは、ソース サーバーの名前とは異なる必要があります。 新しいサーバーを指すようにクライアントを再構成する必要があります。

  1. テンプレートを新しいリージョンに再デプロイします。 ARM テンプレートを使用して Azure Database for PostgreSQL を作成する方法の例については、「クイック スタート: ARM テンプレートを使用して Azure Database for PostgreSQL - フレキシブル サーバーを作成する」を参照してください。

データを含めて再デプロイする

Azure Database for PostgreSQL のデータ移行を伴う再デプロイは、論理バックアップと復元に基づいており、ネイティブ ツールが必要です。 その結果、復元中に顕著なダウンタイムが発生することが予想されます。

ヒント

Azure portal を使用して Azure Database for PostgreSQL - フレキシブル サーバーを再配置できます。 単一サーバーのレプリケーションを実行する方法については、「Azure portal を使用して Azure Database for PostgreSQL - フレキシブル サーバーを別のリージョンに移動する」を参照してください。

  1. エクスポートされたテンプレート パラメーターを宛先リージョンに合わせて調整します。

重要

ターゲット サーバー名は、ソース サーバー名とは異なる必要があります。 新しいサーバーを指すようにクライアントを再構成する必要があります。

  1. テンプレートを新しいリージョンに再デプロイします。 ARM テンプレートを使用して Azure Database for PostgreSQL を作成する方法の例については、「クイック スタート: ARM テンプレートを使用して Azure Database for PostgreSQL - フレキシブル サーバーを作成する」を参照してください。

  2. 移行用にプロビジョニングされたコンピューティング リソースに、移行する PostgreSQL バージョン用の PostgreSQL クライアント ツールをインストールします。 次の例では、Ubuntu 20.04 LTS を実行する Azure VM で PostgreSQL バージョン 13 を使用します。

      sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
      wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
      sudo apt-get update
      sudo apt-get install -y postgresql-client-13
    

    Ubuntu での PostgreSQL コンポーネントのインストールの詳細については、「Linux ダウンロード (Ubuntu)」を参照してください。

    他のプラットフォームについては、「PostgreSQL ダウンロード」にアクセスしてください。

  3. (省略可能) ソース サーバーで追加のロールを作成した場合は、ターゲット サーバーでもそのロールを作成します。 既存のロールの一覧を取得するには、次のクエリを使用します。

    select *
    from pg_catalog.pg_roles
    where rolename not like 'pg_%' and rolename not in ('azuresu', 'azure_pg_admin', 'replication')
    order by rolename;
    
  4. 各データベースを移行するには、次の手順を実行します。

    1. ソース サーバー上のすべてのデータベース アクティビティを停止します。
    2. 次のスクリプトの資格情報、ソース サーバー、ターゲット サーバー、データベース名を置き換えます。
        export USER=admin_username
        export PGPASSWORD=admin_password
        export SOURCE=pgsql-arpp-source.postgres.database.azure.com
        export TARGET=pgsql-arpp-target.postgres.database.azure.com
        export DATABASE=database_name
        pg_dump -h $SOURCE -U $USER --create --exclude-schema=pg_catalog $DATABASE | psql -h $TARGET -U $USER postgres
    
    1. データベースを移行するには、スクリプトを実行します。

    2. ターゲット サーバーを指すようにクライアントを構成します。

    3. アプリケーションで機能テストを実行します。

      1. サービス エンドポイントがターゲット リージョンで構成されていない場合に IaC がデータベースのデプロイに失敗するように、ignoreMissingVnetServiceEndpoint フラグが False に設定されていることを確認します。