Azure Backup Vaultを使ったAzure Database for PostgreSQLのバックアップ

Azure Backup Vaultを利用したAzure Database for PostgreSQLのバックアップがプレビュー提供されています。(2021年7月現在)

長期保有を指定した Azure Database for PostgreSQL のバックアップ (プレビュー)

Azure Database for PostgreSQLで提供されているバックアップ(Geo冗長やローカル冗長)との大きな違いはこんな感じかと思います。

      • 最大10年間保存可能
      • バックアップ方式がpg_dumpである
      • マネージドIDを使ったバックアップ
      • DB単位でのバックアップ、リストアが可能である
      • すでにある別サーバへのリストアも可能
      • Blobストレージへのリストアが可能

今回はAzure backup Vaultを利用したAzure Database for PostgreSQLのバックアップとして、Azureリソースへの権限付与、バックアップスケジュール作成、PostgreSQLへの権限付与設定、バックアップ設定、リストア作業まで実施してみました。

スクリプトも提供されていますが、今回は作業内容を理解する為に手動で作業を実施しています。

なお作業にあたっては公式ページもそうなのですが、そこからリンクされるドキュメント2つが非常に参考になります。公式HPの手順は前提がかなり省かれているのでドキュメントを参照した方がエラーは少なくなるかと思います。

Azure Backup for Azure PostgreSQL: Setting Permissions

Azure Backup for Azure Database for PostgreSQL server: Pre-requisites (Manual)

スポンサーリンク

今回の検証環境設定

Azure ADユーザー、Azure Database for PostgreSQL、Azure Backup Vaultの設定です。Azure ADユーザー、Azure Database for PostgreSQLは事前に準備したリソースを利用しています。

      • Azure Backup Vault
        • バックアップコンテナー名:backup-vault-01
        • 地域:東日本
        • バックアップストレージの冗長性:ローカル冗長
      • Azure Database for PostgreSQL
          • サーバ名:backup-test-01.postgres.database.azure.com
          • リージョン:東日本
          • バージョン:11
          • パフォーマンス構成:Basic、1 個の仮想コア、5 GB
      • AADユーザー(PostgreSQLの管理者設定したユーザー)
        • ユーザー名:pg-backup-user@XXXXXX.XXXXXX.XXXXXX

Azure  Backup Vaultでバックアップ設定する前の事前準備

事前にAzure Database for PostgreSQL側でAD管理者設定や接続のセキュリティ設定が必要になります。

Azure Database for PostgreSQLでAD管理者設定

Azure PortalでAzure Database for PostgreSQLにAD管理者設定を行う必要があります。今回は事前にAzure ADに作成したpg-backup-user@XXXXXX.XXXXXX.XXXXXXを利用します。

Azure Database for PostgreSQLでAAD管理者設定

Azure Database for PostgreSQLのメニューでActive Directory 管理者を選択します。管理者の設定をクリックします。

Active Directoryの管理者設定になりますので、AADユーザーを設定します。今回はpg-backup-userを指定し選択をクリックします。

※グループの設定も可能です。

AAD管理者の設定がされている事を確認したら保存をクリックします。

Azure Database for PostgreSQLで接続のセキュリティ設定

Azureサービスへのアクセス許可をはいに変更します。これが許可されてないとエラーになります。またSSL接続は有効(デフォルトは有効です。)にします。

併せて自身の作業用端末IPからの接続許可を行っていますが、この作業用IPから接続許可(ファイアウォール規則)自体はバックアップの動作には影響しません。

      • 設定(接続のセキュリティ設定)
        • Azureサービスへのアクセス許可:はい
        • SSL接続:有効
        • ファイアウォール規則:自身がアクセスするグローバルIPを許可

※SSLを有効にしておかないとエラーになるケースがあったので有効にしています。

Azure Database for PostgreSQLの接続許可設定

Azureサービスへのアクセス許可をはいに設定変更します。

作業用にクライアントIPの追加を選択します。

SSL設定を強制するを”はい”にします。(デフォルトは”はい”なので基本はそのままでOKです。)

※作業環境に応じて許可するIPは指定して下さい。(開始IPと終了IPに同じIPを指定すると/32で指定可能です。)

SSLを有効にしないと実際のバックアップ設定時に、UserErrorSSLDisabledのエラーになりました。

Azure Backup Vault(バックアップ)コンテナーとバックアップポリシー作成

今回作成したBackup Vault(バックアップコンテナー)の構成

今回作成したAzure Backup Vaultの設定です。記載の項目以外はデフォルトのままとしています。

      • 設定内容(Azure Backup Vault)
        • バックアップコンテナー名:backup-vault-01
        • 地域:東日本
        • バックアップストレージの冗長性:ローカル冗長

Azure Backup Vault(バックアップコンテナー)を作成

Azure Portalを利用してBackup Vault(バックアップコンテナー)を作成します。バックアップ コンテナーの作成の通りでほぼ設定項目もなく簡単に作成出来ます。

※バックアップ対象のAzure Database for PostgreSQLと同じリージョンに作成する必要があります。

バックアップコンテナー作成

バックアップ コンテナーのメニューで作成を開始します。

バックアップコンテナー作成画面で設定を進めます。バックアップコンテナー名、地域を設定します。冗長性はローカル冗長を選択しています。

確認画面が表示されます。内容を確認して問題がなければ作成をクリックします。

今回作成したバックアップポリシーの構成

今回作成したバックアップポリシーの設定です。記載の項目以外はデフォルトのままとしています。バックアップポリシーではデータソースの種類を指定する必要があります。

      • 設定内容(バックアップポリシー)
        • ポリシー名:pg-backup-policy–01
        • データソースの種類:Azure Database for PostgreSQL
        • コンテナー:backup-test-vault-01
        • 日、時間:日曜日、日本時間19時
        • スケジュールと保管期間:規定(3か月間)、12週間(週次)

※今回は利用していませんがバックアップ保管先としてアーカイブの選択も可能です。

バックアップポリシーを作成

バックアップポリシーを作成してみます。ポリシーもポリシー名とバックアップ対象(PostgreSQL)を選択するだけで非常に簡単に設定が出来ます。

バックアップポリシー作成

バックアップコンテナーのバックアップポリシーで選択し追加を開始します。

バックアップポリシーの作成画面で設定を進めます。ポリシー名、データソースの種類を設定します。コンテナーはバックアップコンテナー名になります。

スケジュールと保持期間の設定になります。保持規則の追加選択するとバックアップ規則の追加が出来ます。

データストア内に保管する期間とアーカイブコンテナーに保管する期間を選択できます。

保持規則は毎週、毎月、毎年の選択が可能です。

また既存のルールも設定変更可能ですので、そちらを変更する形でも良いかと思います。

確認と作成を選択します。

アーカイブを利用すると課金額を抑える事が出来ます。こちらを参照ください。

またAzure Bcakupでのアーカイブについてはこちらを参照ください。

確認と作成画面が表示されます。内容を確認し問題が無ければ作成をクリックします。

作成が完了するとバックアップポリシーが作成されている事が確認出来ます。

※一度作成したポリシーは変更できません。もし変更する場合は別ポリシーを作成し付け替えする形になります。

Azure Database for PostgreSQLにBackup Vault(バックアップコンテナー)の権限付与

Backup Vault(バックアップコンテナー)を利用するにあたっては、Azure Database for PostgreSQL側でBackup Vault(バックアップコンテナー)に対する権限付与が必要になります。

必要な権限はAzure Database for PostgreSQLの閲覧者ロールになります。

Azure Database for PostgreSQLへBackup Vaultの権限付与

ストレージアカウントのメニューでアクセス制御(IAM)を選択します。

ロールの割り当ての追加で閲覧者を選択します。

メンバーの選択になります。メンバーを選択するを使い先ほど作成したバックアップコンテナー(今回の場合はbackup-vault-01)を選択します。

選択が完了するとメンバーが追加されているのが確認出来ます。

レビューと割り当てに進みます。

 

内容を確認し問題が無ければ、レビューと割り当てをクリックし権限付与を行います。

PostgreSQLで権限付与設定をする

PostgreSQL上で権限付与設定を行います。

Azure CLIでログインしトークンを取得しPostgreSQLへログインする

Azure ADユーザーでPostgreSQLにログインする為のトークンを取得します。今回は事前にAzure ADに作成したpg-backup-user@XXXXXX.XXXXXX.XXXXXXを利用します。

こちらの設定や実際のログイン方法についてはこちらの記事を参照願います。

今回はA5:SQL Mk-2を利用してAzure Database for PostgreSQLに接続しています。

    • 接続情報
      • ホスト名:backup-test-01.postgres.database.azure.com(サーバ名.postgres.database.azure.com)
      • データベース名:postgres(デフォルト)
      • ユーザーID:pg-backup-user@XXXXXX.XXXXXX.XXXXXX@backup-test-01(ユーザー名@サーバ名)
      • Port:5432
      • パスワード:トークン値

テスト用データベース、スキーマ、テーブルを追加する

最初にバックアップ動作確認用のDB、スキーマ、テーブル作成します。

      • テスト用データベース、スキーマ、テーブル
        • データベース名: backuptestdb
        • スキーマ:backuptest01
        • テーブル:weather(PostgreSQLの解説ページにあったテーブル文をそのまま流用)
テスト用データ追加

PostgreSQL側でデータベース、スキーマ、テーブルを作成します。

#データベース作成
create database backuptestdb;

#スキーマ作成
CREATE SCHEMA backuptest01;

#テーブル作成
CREATE TABLE backuptest01.weather (
 city varchar(80),
 temp_lo int, — 最低気温
 temp_hi int, — 最高気温
 prcp real, — 降水量
 date date
);

 

確認するとデータベース、スキーマ、テーブルが作成されている事が分かります。

※確認にあたってはA5:SQL Mk-2上で接続DB設定を追加しています。

PostgreSQL上でバックアップ用の権限設定を行う

PostgreSQLでバックアップ権限の付与設定を行います。マニュアルに記載されている内容を実行していきます。

PostgreSQLでの権限付与

マネージドIDを利用してPostgreSQLの認証を行う為の設定をします。詳細はこちらを参照願います。azure_backupロールを作成しています。

#マネージドIDでのアクセス設定
set aad_validate_oids_in_tenant = off;

create role azure_backup with login password 'アプリケーションID' in role azure_ad_user;

azure_backupロールにバックアップ対象のデータベースへ権限付与を行います。select nspname from pg_catalog.pg_namespaceを個別で実行すると分かるのですが、スキーマの情報を取得しており、データベースに存在する全スキーマに権限付与を行うSQLになります。

※これを実施しないとインスタンスバックアップ設定時にアクセス権限不足でエラーになります。

#データベースへ権限付与を行う

DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN select nspname from pg_catalog.pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO azure_backup $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL TABLES IN SCHEMA %I TO azure_backup $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON TABLES TO azure_backup $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL SEQUENCES IN SCHEMA %I TO azure_backup $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON SEQUENCES TO azure_backup $$, sch);
END LOOP;
END;
$do$
;

権限付与を行わない場合はUserErrorMissingDBPermissionsのエラーが発生します。なおこのエラーはリストア権限を付与し忘れた場合にも発生します。

※バックアップ対象のデータベースでスキーマを追加した場合は追加したスキーマに対してPostgreSQLでの権限付与が必要になります。(データベースへの権限付与SQLをスキーマ指定して実施します。)

リストアは新規データベース作成する形になります。azure_backupロールにへデータベース作成権限付与を行います。

※CREATEDB権限を付与しないとアクセス権限不足でリストア時に権限不足エラー(UserErrorMissingDBPermissions)になります。別サーバにリストアする場合は、別サーバ側でも同様の権限付与設定が必要になります。

#データベース作成権限付与を行う

ALTER USER azure_backup CREATEDB;

Azure Backup Vault(バックアップコンテナー)でバックアップ設定

バックアップインスタンスを作成

PostgreSQL上での権限付与設定が完了したらAzure Backup Vaylt(コンテナー)でバックアップインスタンスの作成(バックアップ設定)を実施します。

Azure Backup Vaultでバックアップ構成
バックアップコンテナーでバックアップを選択しバックアップの構成を開始します。
バックアップの構成でデータソースの種類にAzure Database for PostgreSQLが選択されている事を確認し次へ進みます。

バックアップポリシーで事前に作成したポリシーを選択し次へ進みます。

※新規作成を選択すると新たにバックアップポリシーを作成する事も可能です。

データソースの選択になります。追加/編集を選択します。
バックアップするリソースの選択になります。バックアップするサーバおよびデータベースを選択します。今回はbackuptestdbを選択します。

選択が終わるとバックアップの準備検証が行われます。権限付与が足りてない場合は検証がエラーになります。

検証が成功したら次へ進みます。

バックアップの構成確認画面になります。内容を確認し問題が無ければバックアップの構成を実施します。

バックアップインスタンスで今すぐバックアップ

Azure Database for PostgreSQLのバックアップを実施します。今回は今すぐバックアップを実施しています。

バックアップ実行
インスタンスのバックアップメニューを選択します。バックアップ対象のバックアップインスタンスを選択しクリックします。
今すぐバックアップを選択します。

バックアップポリシーの内容が表示されます。今すぐバックアップを実行します。

バックアップステータスはバックアップジョブの画面で確認出来ます。

バックアップが完了すると状態が完了になります。

※今すぐバックアップの場合は操作にオンデマンドバックアップと表示されます。

Azure Backup Vault(バックアップコンテナー)でPostgreSQLのデータベースリストア作業

PostgreSQLのリストア作業実施します。今回はbackuptestdb_restore_01と言うデータベース名でリストア実施します。

※現時点では同じデータベースへの上書きリストアは実施できません。

PostgreSQLのリストア作業
バックアップコンテナーで復元を選択します。
復元を開始します。バックアップインスタンスを選択するをクリックします。
バックアップインスタンスのリストが表示されますのでリストア対象を選択します。
復元ポイントの選択で次へ進みます。
復元ポイントの選択を行います。デフォルトは最新の復元ポイントが表示されます。復元ポイントを選択し次へ進みます。

復元する場所と復元対象のサーバ選択になります。

今回は同じバックアップ元のサーバと同じサーバに別データベース名で戻します。

既存のサーバから選択するをクリックします。

ターゲットサーバ(リストア先サーバ)の選択になります。サーバを選択します。

復元されたデータベース名を入力します。

※元のデータベースへの上書きリストアは現時点ではサポートされていない為別名でリストアします。

復元の検証確認画面になります。

復元します。

バックアップジョブで復元のステータスが確認出来ます。状態が完了になっていればリストアが終了しています。
リストア後にPostgreSQLを確認するとデータベースが作成されている事が確認出来ます。またテーブルが復元されている事も確認出来ます。

pg_dumpコマンドの発行、バックアップ保管をAzure側で実施してもらえます。今回は実施していませんがBlobへのリストアも可能なため使い道は結構ありそうに思えました。

Azure Backup Vault(バックアップコンテナー)削除

Azure Backup Vault(バックアップコンテナー)削除は以下の順番で実施します。

      • Azure Backup Vayltでバックアップインスタンスの削除
      • Azure Backup Vayltでバックアップポリシーの削除
      • Azure Database for PostgreSQLでのBackup VaultへのIAM権限付与削除
      • バックアップコンテナー削除

※バックアップポリシーを削除しないとバックアップセンターでバックアップポリシーが残ってしまっていたので削除した方が良いかと思われます。

Azure Database for PostgreSQL自体で提供されているバックアップリストア機能についてはこちらで試しています。