Azure CLI を使用して Azure PostgreSQL データベースをバックアップする
この記事では、Azure CLI を使用して Azure PostgreSQL データベースをバックアップする方法について説明します。
この記事では、次の方法について学習します。
- バックアップ コンテナーの作成
- バックアップ ポリシーの作成
- Azure PostgreSQL データベースのバックアップを構成する
- オンデマンド バックアップ ジョブを実行する
informgreSQL データベースでサポートされるシナリオと制限事項については、「サポート マトリックス」を参照してください。
バックアップ コンテナーの作成
バックアップ コンテナーは、Azure のストレージ エンティティです。 これにより、Azure Backup でサポートされる新しいワークロードのバックアップ データが保存されます。 たとえば、Azure Database for PostgreSQL サーバー、ストレージ アカウント内の BLOB、Azure ディスクなどです。 バックアップ コンテナーは、管理オーバーヘッドを最小限に抑えながら、バックアップ データを整理するのに役立ちます。 バックアップ コンテナーは、Azure の Azure Resource Manager モデルに基づいており、強化されたバックアップ データの保護機能を提供します。
バックアップ コンテナーを作成する前に、コンテナー内のデータのストレージ冗長を選択します。 次に、そのストレージ冗長と場所を使用したバックアップ コンテナーの作成に進みます。
この記事では、westus リージョンのリソース グループ testBkpVaultRG に、バックアップ コンテナー TestBkpVault を作成します。 バックアップ コンテナーを作成するには、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": "2ca1d5f7-38b3-4b61-aa45-8147d7e0edbc",
"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"
}
コンテナーが作成された後、Azure PostgreSQL データベースを保護するバックアップ ポリシーを作成しましょう。
バックアップ ポリシーの作成
PostGreSQL のバックアップ ポリシーについて
ディスク バックアップでは 1 日に複数回のバックアップを行うことができ、BLOB バックアップはトリガーのない "継続的" バックアップですが、PostgreSQL バックアップではアーカイブ保護が提供されます。 最初にコンテナーに送信されたバックアップ データはその後、定義された規則または "ライフサイクル" に従って、Archive レベルに移動することができます。 このコンテキストで、PostgreSQL のバックアップ ポリシー オブジェクトについて理解しましょう。
- PolicyRule
- BackupRule
- BackupParameter
- BackupType (この場合はデータベースの完全バックアップ)
- 初期データストア (バックアップを最初に保存する場所)
- トリガー (バックアップのトリガー方法)
- スケジュール ベース
- 既定のタグ付け条件 (スケジュールされたすべてのバックアップの既定の "タグ"。このタグにより、バックアップが保持ルールにリンクされます)
- BackupParameter
- 既定の保有規則 (初期データストアにおいて、既定ですべてのバックアップに適用される規則)
- BackupRule
そのため、このオブジェクトでは、トリガーされるバックアップの種類、トリガー方法 (スケジュールを使用)、タグ付け対象、その保存先 (データストア)、およびデータストア内のバックアップ データのライフ サイクルを定義します。 PostgreSQL の既定の PowerShell オブジェクトでは、"完全" バックアップを毎週トリガーし、コンテナーに保存され、3 か月間格納されるようになっています。
Archive レベルをポリシーに追加する場合は、データをコンテナーからアーカイブに移動するタイミング、データをアーカイブに保存する期間、およびスケジュールされたバックアップの内、どのバックアップに "アーカイブ可能" のタグを付けるかを決定する必要があります。 そのため、"保有規則" を追加する必要があります。ここでは、コンテナー データストアからアーカイブ データストアへのバックアップ データのライフサイクルと、"アーカイブ" データストアに保持する期間を定義します。 その後、スケジュールされたバックアップを "アーカイブ対象" としてマークする ''タグ'' を追加する必要があります。
結果の PowerShell オブジェクトは次のようになります。
- PolicyRule
- BackupRule
- BackupParameter
- BackupType (この場合はデータベースの完全バックアップ)
- 初期データストア (バックアップを最初に保存する場所)
- トリガー (バックアップのトリガー方法)
- スケジュール ベース
- 既定のタグ付け条件 (スケジュールされたすべてのバックアップの既定の "タグ"。このタグにより、バックアップが保持ルールにリンクされます)
- 新しい保有規則の新しいタグ付け条件 ('X' と同じ名前)
- BackupParameter
- 既定の保有規則 (初期データストアにおいて、既定ですべてのバックアップに適用される規則)
- 'X' という名前の新しい保有規則
- ライフサイクル
- ソース データストア
- ソース データストアで一定期間が経過した後削除する
- ターゲット データストアにコピーする
- ライフサイクル
- BackupRule
ポリシー テンプレートを取得する
Azure 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"
}
]
}
ポリシー テンプレートは、トリガー (何がバックアップをトリガーするかを決定) とライフサイクル (バックアップをいつ削除、コピー、移動するかを決定) で構成されます。 Azure 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 か月間コンテナーに保持し、Archive レベルに移動して 24 か月間 Archive レベルに保持する必要があります。
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 PostgreSQL データベースを保護するために考慮する必要がある重要なポイントが 3 つあります。
関連する主なエンティティ
保護する PostGreSQL データベース
保護する PostgreSQL の Azure Resource Manager ID (ARM ID) を取り込みます。 これは、データベースの識別子として機能します。 ここでは、別のサブスクリプションのリソース グループ ossrg に存在する PostgreSQL サーバー testposgresql の下に、empdb11 という名前のデータベースがある場合の例を使用します。
次の例では、bash を使用します。
ossId="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"
Azure Key Vault
Azure Backup サービスは、PostgreSQL データベースに接続するためのユーザー名とパスワードは保存しません。 代わりに、バックアップ管理者が "キー" をキー コンテナーにシードする必要があります。 その後、Backup サービスはキー コンテナーにアクセスし、キーを読み取って、データベースにアクセスします。 関連するキーのシークレット識別子をメモします。
次の例では、bash を使用します。
keyURI="https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"
バックアップ資格情報コンテナー
バックアップ コンテナーを PostgreSQL サーバーに接続してから、キー コンテナーに存在するキーを使用してデータベースにアクセスする必要があります。 そのため、PostgreSQL サーバーとキー コンテナーへのアクセスが必要となります。 バックアップ コンテナーの管理対象サービス ID (MSI) にアクセス権が付与されます。
PostgreSQL サーバー上のバックアップ コンテナーの管理対象サービス ID (MSI)、およびデータベースのキーを保存する Azure Key Vault に付与する必要があるアクセス許可を確認してください。
要求を準備する
関連するすべてのアクセス許可が設定されたら、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