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)
- 1. 検証環境設定
- 2. Azure Backup Vaultの事前準備
- 3. Azure Backup Vault(バックアップ)コンテナーとバックアップポリシー作成
- 4. Azure Database for PostgreSQLにBackup Vault(バックアップコンテナー)の権限付与
- 5. PostgreSQLで権限付与設定をする
- 6. Azure Backup Vault(バックアップコンテナー)でバックアップ設定
- 7. Azure Backup Vault(バックアップコンテナー)を使ってPostgreSQLのデータベースリストア作業
- 8. Azure Backup Vault(バックアップコンテナー)削除
検証環境設定
Azure ADユーザー、Azure Database for PostgreSQL、Azure Backup Vaultの設定です。Azure ADユーザー、Azure Database for PostgreSQLは事前に準備したリソースを利用しています。
-
-
- Azure Backup Vault
- バックアップコンテナー名:backup-vault-01
- 地域:東日本
- バックアップストレージの冗長性:ローカル冗長
- Azure Backup Vault
-
-
-
- Azure Database for PostgreSQL
-
- サーバ名:backup-test-01.postgres.database.azure.com
- リージョン:東日本
- バージョン:11
- パフォーマンス構成:Basic、1 個の仮想コア、5 GB
-
- Azure Database for PostgreSQL
-
-
-
- AADユーザー(PostgreSQLの管理者設定したユーザー)
- ユーザー名:pg-backup-user@XXXXXX.XXXXXX.XXXXXX
- AADユーザー(PostgreSQLの管理者設定したユーザー)
-
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 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週間(週次)
- 設定内容(バックアップポリシー)
-
※今回は利用していませんがバックアップ保管先としてアーカイブの選択も可能です。
Backup Vaultでバックアップポリシーを作成
バックアップポリシーを作成してみます。ポリシーもポリシー名とバックアップ対象(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側でデータベース、スキーマ、テーブルを作成します。 |
|
|
確認するとデータベース、スキーマ、テーブルが作成されている事が分かります。 ※確認にあたってはA5:SQL Mk-2上で接続DB設定を追加しています。 |
PostgreSQL上でバックアップ用の権限設定を行う
PostgreSQLでバックアップ権限の付与設定を行います。マニュアルに記載されている内容を実行していきます。
PostgreSQLでの権限付与 | ||
マネージドIDを利用してPostgreSQLの認証を行う為の設定をします。詳細はこちらを参照願います。azure_backupロールを作成しています。
|
||
azure_backupロールにバックアップ対象のデータベースへ権限付与を行います。select nspname from pg_catalog.pg_namespaceを個別で実行すると分かるのですが、スキーマの情報を取得しており、データベースに存在する全スキーマに権限付与を行うSQLになります。 ※これを実施しないとインスタンスバックアップ設定時にアクセス権限不足でエラーになります。
|
||
権限付与を行わない場合はUserErrorMissingDBPermissionsのエラーが発生します。なおこのエラーはリストア権限を付与し忘れた場合にも発生します。 ※バックアップ対象のデータベースでスキーマを追加した場合は追加したスキーマに対してPostgreSQLでの権限付与が必要になります。(データベースへの権限付与SQLをスキーマ指定して実施します。) |
||
リストアは新規データベース作成する形になります。azure_backupロールにへデータベース作成権限付与を行います。 ※CREATEDB権限を付与しないとアクセス権限不足でリストア時に権限不足エラー(UserErrorMissingDBPermissions)になります。別サーバにリストアする場合は、別サーバ側でも同様の権限付与設定が必要になります。
|
Azure Backup Vault(バックアップコンテナー)でバックアップ設定
バックアップインスタンスを作成
PostgreSQL上での権限付与設定が完了したらAzure Backup Vaylt(コンテナー)でバックアップインスタンスの作成(バックアップ設定)を実施します。
バックアップインスタンスで今すぐバックアップ
Azure Database for PostgreSQLのバックアップを実施します。今回は今すぐバックアップを実施しています。
Azure Backup Vault(バックアップコンテナー)を使ってPostgreSQLのデータベースリストア作業
PostgreSQLのリストア作業実施します。今回はbackuptestdb_restore_01と言うデータベース名でリストア実施します。
※現時点では同じデータベースへの上書きリストアは実施できません。
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自体で提供されているバックアップリストア機能についてはこちらで試しています。
Azure Database for PostgreSQLフレキシブルサーバーのバックアップリストアについてはこちらに纏めています。