この記事では、Azure CLI を使用して Azure Virtual Machines で PostgreSQL データベースをバックアップする方法について説明します。 Azure portal、Azure PowerShell、および PostgreSQL データベース用の REST API を使用してバックアップを構成することもできます。
サポート されているシナリオ と、Azure Database for PostgreSQL のバックアップ に関してよく寄せられる質問 について説明します。
バックアップ コンテナーの作成
Backup コンテナーは、Azure のストレージ エンティティです。 Azure Database for PostgreSQL サーバー、ストレージ アカウント内の BLOB、Azure ディスクなど、Azure Backup がサポートする新しいワークロードのバックアップ データが格納されます。 バックアップ コンテナーは、管理オーバーヘッドを最小限に抑えながら、バックアップ データを整理するのに役立ちます。 バックアップ コンテナーは、Azure の Azure Resource Manager モデルに基づいており、強化されたバックアップ データの保護機能を提供します。
バックアップ コンテナーを作成する前に、コンテナー内のデータのストレージ冗長を選択します。 次に、そのストレージ冗長と場所を使用したバックアップ コンテナーの作成に進みます。
この記事では、TestBkpVault
リージョンのリソース グループ westus
の下に、testBkpVaultRG
という名前の Backup コンテナーを作成します。
az dataprotection vault create
コマンドを使用してバックアップ コンテナーを作成します。
バックアップ コンテナーの作成について詳しくは、こちらをご覧ください。
az dataprotection backup-vault create -g testBkpVaultRG --vault-name TestBkpVault -l westus --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"
{
"eTag": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testBkpVaultRG/providers/Microsoft.DataProtection/BackupVaults/TestBkpVault",
"identity": {
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
},
"___location": "westus",
"name": "TestBkpVault",
"properties": {
"provisioningState": "Succeeded",
"storageSettings": [
{
"datastoreType": "VaultStore",
"type": "LocallyRedundant"
}
]
},
"resourceGroup": "testBkpVaultRG",
"systemData": null,
"tags": null,
"type": "Microsoft.DataProtection/backupVaults"
}
バックアップ ポリシーの作成
コンテナーを作成したら、PostgreSQL データベースの保護に役立つバックアップ ポリシーを作成できます。 REST API を使用して PostgreSQL データベースのバックアップ ポリシーを作成することもできます。
PostgreSQL バックアップ ポリシーについて
ディスク バックアップでは 1 日に複数のバックアップが提供され、BLOB バックアップはトリガーのない 継続的 バックアップですが、PostgreSQL バックアップではアーカイブ保護が提供されます。 コンテナーに最初に送信されるバックアップ データは、定義されたルールまたはライフ サイクルに従ってアーカイブ層に移動できます。
このコンテキストでは、次の階層が PostgreSQL のバックアップ ポリシー オブジェクトを理解するのに役立ちます。
- ポリシー ルール
- バックアップ規則
- Backup パラメーター
- バックアップの種類 (この場合はデータベースの完全バックアップ)
- 初期データストア (バックアップが最初に配置される場所)
- トリガー (バックアップのトリガー方法)
- スケジュール
- 既定のタグ付け基準 (スケジュールされたすべてのバックアップを保持ルールにリンクする既定のタグ)
- Backup パラメーター
- 既定の保持ルール (既定では、初期データストア上のすべてのバックアップに適用されるルール)
- バックアップ規則
ポリシー オブジェクトは、トリガーされるバックアップの種類、バックアップのトリガー方法 (スケジュールを介して)、タグ付けされる内容、格納場所 (データストア)、データストア内のデータのライフ サイクルを定義します。
PostgreSQL の既定の PowerShell オブジェクトは、毎週 完全 バックアップをトリガーすることを示しています。 バックアップはコンテナーに到達し、3 か月間保存されます。
アーカイブ層をポリシーに追加する場合は、データをコンテナーからアーカイブに移動するタイミング、データがアーカイブに保持される期間、スケジュールされたバックアップのうち、アーカイブ可能としてタグ付けする必要があるバックアップを決定する必要があります。 コンテナー データストアからアーカイブ データストアへのバックアップ データのライフ サイクルを定義する保持ルールを追加する必要があります。 保持ルールでは、バックアップ データがアーカイブ データストアに保持される期間も定義されます。 その後、スケジュールされたバックアップをアーカイブ対象としてマークするタグを追加する必要があります。
結果の PowerShell オブジェクトは次のようになります。
- ポリシー ルール
- バックアップ規則
- Backup パラメーター
- バックアップの種類 (この場合はデータベースの完全バックアップ)
- 初期データストア (バックアップが最初に配置される場所)
- トリガー (バックアップのトリガー方法)
- スケジュール
- 既定のタグ付け基準 (スケジュールされたすべてのバックアップを保持ルールにリンクする既定のタグ)
- 同じ名前の新しい保持規則に対する新しいタグ付け条件
- Backup パラメーター
- 既定の保持ルール (既定では、初期データストア上のすべてのバックアップに適用されるルール)
- 新しい保持ルール
- ライフサイクル
- ソース データストア
- ソース データストアでの削除の期間
- ターゲット データストアにコピーする
- ライフサイクル
- バックアップ規則
ポリシー テンプレートを取得する
PostgreSQL データベース バックアップのバックアップ ポリシーの内部コンポーネントを理解するには、 az dataprotection backup-policy get-default-policy-template
コマンドを使用してポリシー テンプレートを取得します。 このコマンドは、データ ソースの種類の既定のポリシー テンプレートを返します。 このポリシー テンプレートを使用して、新しいポリシーを作成します。
az dataprotection backup-policy get-default-policy-template --datasource-type AzureDatabaseForPostgreSQL
{
"datasourceTypes": [
"Microsoft.DBforPostgreSQL/servers/databases"
],
"name": "OssPolicy1",
"objectType": "BackupPolicy",
"policyRules": [
{
"backupParameters": {
"backupType": "Full",
"objectType": "AzureBackupParams"
},
"dataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"name": "BackupWeekly",
"objectType": "AzureBackupRule",
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2021-08-15T06:30:00+00:00/P1W"
],
"timeZone": "UTC"
},
"taggingCriteria": [
{
"isDefault": true,
"tagInfo": {
"id": "Default_",
"tagName": "Default"
},
"taggingPriority": 99
}
]
}
},
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P3M",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
]
}
ポリシー テンプレートは、トリガー (バックアップのトリガーを決定する) とライフ サイクル (バックアップを削除、コピー、または移動するタイミングを決定します) で構成されます。 PostgreSQL データベース バックアップでは、トリガーの既定値はスケジュールされた毎週のトリガー (7 日ごとに 1 回のバックアップ) です。 各バックアップは 3 か月間保持されます。
スケジュールされたトリガー
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2021-08-15T06:30:00+00:00/P1W"
],
"timeZone": "UTC"
}
拘束ルールの既定のライフ サイクル
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P3M",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
ポリシー テンプレートを変更する
Azure PowerShell では、ステージングの場所としてオブジェクトを使用して、すべての変更を実行できます。 Azure CLI では、オブジェクトの概念がないため、ファイルを使用する必要があります。 各編集操作は、新しいファイルにリダイレクトする必要があります。ここで、コンテンツは入力ファイルから読み取られ、出力ファイルにリダイレクトされます。 スクリプトでファイルを使用するときに、後で必要に応じてファイルの名前を変更できます。
スケジュールを変更する
既定のポリシー テンプレートでは、バックアップは週に 1 回行われます。 このスケジュールは、バックアップを週に複数日行うように変更することができます。 スケジュールを変更するには、 az dataprotection backup-policy trigger set
コマンドを使用します。
次の例では、毎週のバックアップを毎週日曜日、水曜日、金曜日に変更します。 スケジュールの日付配列は日付を表し、その日付の曜日は曜日として扱われます。 また、これらのスケジュールが毎週繰り返されるように指定する必要があります。 そのため、スケジュール間隔は 1
され、間隔の種類は Weekly
。
az dataprotection backup-policy trigger create-schedule --interval-type Weekly --interval-count 1 --schedule-days 2021-08-15T22:00:00 2021-08-18T22:00:00 2021-08-20T22:00:00
[
"R/2021-08-15T22:00:00+00:00/P1W",
"R/2021-08-18T22:00:00+00:00/P1W",
"R/2021-08-20T22:00:00+00:00/P1W"
]
az dataprotection backup-policy trigger set --policy .\OSSPolicy.json --schedule R/2021-08-15T22:00:00+00:00/P1W R/2021-08-18T22:00:00+00:00/P1W R/2021-08-20T22:00:00+00:00/P1W > EditedOSSPolicy.json
新しい保有規則を追加する
アーカイブ保護を追加する場合は、ポリシー テンプレートを変更する必要があります。
既定のテンプレートには、既定の保持ルールの下にある初期データストアのライフ サイクルがあります。 このシナリオでは、3 か月後にバックアップ データを削除する規則となっています。 データをアーカイブ データストアに移動するタイミングを定義する新しい保持ルールを追加する必要があります。 つまり、バックアップ データは最初にアーカイブ データストアにコピーされ、次にコンテナー データストア内で削除されます。
また、ルールでは、アーカイブ データストアにデータを保持する期間を定義する必要があります。 新しいライフ サイクルを作成するには、 az dataprotection backup-policy retention-rule create-lifecycle
コマンドを使用します。 これらのライフ サイクルを新規または既存のルールに関連付けるには、 az dataprotection backup-policy retention-rule set
コマンドを使用します。
次の例では、 Monthly
という名前の新しい保持ルールを作成します。 このルールでは、毎月最初に成功したバックアップはコンテナーに 6 か月間保持され、アーカイブ層に移動され、アーカイブ層に 24 か月間保持されます。
az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 6 --retention-duration-type Months --source-datastore VaultStore --target-datastore ArchiveStore --copy-option CopyOnExpiryOption > VaultToArchiveLifeCycle.JSON
az dataprotection backup-policy retention-rule create-lifecycle --retention-duration-count 24 --retention-duration-type Months -source-datastore ArchiveStore > OnArchiveLifeCycle.JSON
az dataprotection backup-policy retention-rule set --lifecycles .\VaultToArchiveLifeCycle.JSON .\OnArchiveLifeCycle.JSON --name Monthly --policy .\EditedOSSPolicy.JSON > AddedRetentionRulePolicy.JSON
タグと関連条件を追加する
保持ルールを作成したら、バックアップ ポリシーの Trigger
プロパティに対応するタグを作成する必要があります。 新しいタグ付け基準を作成するには、 az dataprotection backup-policy tag create-absolute-criteria
コマンドを使用します。 既存のタグを更新するか、新しいタグを作成するには、 az dataprotection backup-policy tag set
コマンドを使用します。
次の例では、条件と共に新しいタグを作成します。これは、月の最初の正常なバックアップです。 タグの名前は、適用予定の対応する保有規則と同じです。
この例では、タグ条件の名前は次 Monthly
。
az dataprotection backup-policy tag create-absolute-criteria --absolute-criteria FirstOfMonth > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON
スケジュールが週に複数のバックアップ (前の例で指定した毎週日曜日、水曜日、木曜日) であり、日曜日と金曜日のバックアップをアーカイブする場合は、 az dataprotection backup-policy tag create-generic-criteria
コマンドを使用してタグ付け基準を変更できます。
az dataprotection backup-policy tag create-generic-criteria --days-of-week Sunday Friday > tagCriteria.JSON
az dataprotection backup-policy tag set --criteria .\tagCriteria.JSON --name Monthly --policy .\AddedRetentionRulePolicy.JSON > AddedRetentionRuleAndTag.JSON
新しい PostgreSQL バックアップ ポリシーを作成する
要件に従ってテンプレートを変更した後、 az dataprotection backup-policy create
コマンドを使用して、変更したテンプレートを使用してポリシーを作成します。
az dataprotection backup-policy create --backup-policy-name FinalOSSPolicy --policy AddedRetentionRuleAndTag.JSON --resource-group testBkpVaultRG --vault-name TestBkpVault
バックアップの構成
コンテナーとポリシーを作成した後、Azure Database for PostgreSQL で PostgreSQL データベースをバックアップするには、3 つの重要なポイントを考慮する必要があります。
主要エンティティを理解する
バックアップする PostgreSQL データベース
バックアップする PostgreSQL データベースの Resource Manager ID を取得します。 この ID は、データベースの識別子として機能します。 次の例では、PostgreSQL サーバー empdb11
の下に testposgresql
という名前のデータベースを使用します。このデータベースは、別のサブスクリプションのリソース グループ ossrg
に存在します。 この例では Bash を使用しています。
ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"
キーボールト (Key Vault)
Azure Backup サービスは、PostgreSQL データベースに接続するためのユーザー名とパスワードは保存しません。 代わりに、バックアップ管理者はキーコンテナーに キー をシードします。 その後、Azure Backup サービスはキー コンテナーにアクセスし、キーを読み取り、データベースにアクセスします。
次の例では Bash を使用します。 関連するキーのシークレット識別子をメモします。
keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"
バックアップ保管庫
Backup コンテナーは、PostgreSQL サーバーに接続し、キー コンテナーに存在するキーを使用してデータベースにアクセスする必要があります。 そのため、Backup コンテナーには PostgreSQL サーバーとキー コンテナーへのアクセスが必要です。 Backup コンテナーのマネージド ID へのアクセスが許可されます。
PostgreSQL サーバー上の Backup コンテナーのマネージド ID と、データベースにキーを格納するキー コンテナーに付与する必要があるアクセス許可について説明します。
要求を準備する
関連するすべてのアクセス許可を設定したら、次の 2 つの手順でバックアップの構成を実行します。
-
az dataprotection backup-instance initialize
コマンドで、関連するコンテナー、ポリシー、PostgreSQL データベースを使用して要求を準備します。 -
az dataprotection backup-instance create
コマンドを使用して、データベースをバックアップする要求を送信します。
az dataprotection backup-instance initialize --datasource-id $ossId --datasource-type AzureDatabaseForPostgreSQL -l <vault-___location> --policy-id <policy_arm_id> --secret-store-type AzureKeyVault --secret-store-uri $keyURI > OSSBkpInstance.JSON
az dataprotection backup-instance create --resource-group testBkpVaultRG --vault-name TestBkpVault TestBkpvault --backup-instance .\OSSBkpInstance.JSON
オンデマンド バックアップを実行する
バックアップのトリガー中に保持ルールを指定する必要があります。 ポリシー内の保持ルールを表示するには、ポリシー JSON ファイルを参照します。 次の例では、 Default
と Monthly
の名前を持つ 2 つの保持ルールがあります。 この記事では、オンデマンド バックアップの Monthly
規則を使用します。
az dataprotection backup-policy show -g ossdemorg --vault-name ossdemovault-1 --subscription e3d2d341-4ddb-4c5d-9121-69b7e719485e --name osspol5
{
"id": "/subscriptions/e3d2d341-4ddb-4c5d-9121-69b7e719485e/resourceGroups/ossdemorg/providers/Microsoft.DataProtection/backupVaults/ossdemovault-1/backupPolicies/osspol5",
"name": "osspol5",
"properties": {
"datasourceTypes": [
"Microsoft.DBforPostgreSQL/servers/databases"
],
"objectType": "BackupPolicy",
"policyRules": [
{
"backupParameters": {
"backupType": "Full",
"objectType": "AzureBackupParams"
},
"dataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"name": "BackupWeekly",
"objectType": "AzureBackupRule",
"trigger": {
"objectType": "ScheduleBasedTriggerContext",
"schedule": {
"repeatingTimeIntervals": [
"R/2020-04-04T20:00:00+00:00/P1W",
"R/2020-04-01T20:00:00+00:00/P1W"
],
"timeZone": "UTC"
},
"taggingCriteria": [
{
"criteria": [
{
"absoluteCriteria": [
"FirstOfMonth"
],
"daysOfMonth": null,
"daysOfTheWeek": null,
"monthsOfYear": null,
"objectType": "ScheduleBasedBackupCriteria",
"scheduleTimes": null,
"weeksOfTheMonth": null
}
],
"isDefault": false,
"tagInfo": {
"eTag": null,
"id": "Monthly_",
"tagName": "Monthly"
},
"taggingPriority": 15
},
{
"criteria": null,
"isDefault": true,
"tagInfo": {
"eTag": null,
"id": "Default_",
"tagName": "Default"
},
"taggingPriority": 99
}
]
}
},
{
"isDefault": false,
"lifecycles": [
{
"deleteAfter": {
"duration": "P10Y",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Monthly",
"objectType": "AzureRetentionRule"
},
{
"isDefault": true,
"lifecycles": [
{
"deleteAfter": {
"duration": "P1Y",
"objectType": "AbsoluteDeleteOption"
},
"sourceDataStore": {
"dataStoreType": "VaultStore",
"objectType": "DataStoreInfoBase"
},
"targetDataStoreCopySettings": []
}
],
"name": "Default",
"objectType": "AzureRetentionRule"
}
]
},
"resourceGroup": "ossdemorg",
"systemData": null,
"type": "Microsoft.DataProtection/backupVaults/backupPolicies"
}
オンデマンド バックアップをトリガーするには、 az dataprotection backup-instance adhoc-backup
コマンドを使用します。
az dataprotection backup-instance adhoc-backup --name "ossrg-empdb11" --rule-name "Monthly" --resource-group testBkpVaultRG --vault-name TestBkpVault
ジョブを追跡する
az dataprotection job list
コマンドを使用して、すべてのジョブを追跡します。 すべてのジョブを一覧表示し、特定のジョブの詳細を取得できます。
Az.ResourceGraph
を使用して、すべてのバックアップ コンテナーにまたがるすべてのジョブを追跡することもできます。
az dataprotection job list-from-resourcegraph
コマンドを使用して、バックアップ保管庫間で関連するジョブを取得します。
az dataprotection job list-from-resourcegraph --datasource-type AzureDatabaseForPostgreSQL --status Completed
関連コンテンツ
- Azure CLI を使用して PostgreSQL データベースを復元します。
- Azure portal、Azure PowerShell、REST API を使用して PostgreSQL データベースを復元します。