この記事では、Azure PowerShell を使用して Azure Database for PostgreSQL をバックアップする方法について説明します。 Azure portal、Azure CLI、および PostgreSQL データベース用の REST API を使用してバックアップを構成することもできます。
Azure Database for PostgreSQL で PostgreSQL データベースをバックアップするために サポートされているシナリオ と よく寄せられる質問 の詳細について説明します。
バックアップ コンテナーの作成
Backup コンテナーは、Azure のストレージ エンティティです。 Azure Database for PostgreSQL サーバー、Azure ディスク、Azure BLOB など、Azure Backup がサポートするさまざまな新しいワークロードのバックアップ データが格納されます。 バックアップ コンテナーを使用すると、管理オーバーヘッドを最小限に抑えながら、バックアップ データを簡単に整理できます。 バックアップ コンテナーは、Azure の Azure Resource Manager モデルに基づいており、強化されたバックアップ データの保護機能を提供します。
バックアップ コンテナーを作成する前に、コンテナー内のデータのストレージ冗長を選択します。 次に、そのストレージ冗長と場所を使用したバックアップ コンテナーの作成に進みます。
この記事では、TestBkpVault
リージョンのリソース グループ westus
の下に、testBkpVaultRG
という名前の Backup コンテナーを作成します。
New-AzDataProtectionBackupVault
コマンドを使用してバックアップ コンテナーを作成します。
バックアップ コンテナーの作成について詳しくは、こちらをご覧ください。
$storageSetting = New-AzDataProtectionBackupVaultStorageSettingObject -Type LocallyRedundant/GeoRedundant -DataStoreType VaultStore
New-AzDataProtectionBackupVault -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Location westus -StorageSetting $storageSetting
$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault
$TestBKPVault | fl
ETag :
Id : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/testBkpVaultRG/providers/Microsoft.DataProtection/backupVaults/TestBkpVault
Identity : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.DppIdentityDetails
IdentityPrincipalId :
IdentityTenantId :
IdentityType :
Location : westus
Name : TestBkpVault
ProvisioningState : Succeeded
StorageSetting : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.StorageSetting}
SystemData : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SystemData
Tag : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.DppTrackedResourceTags
Type : Microsoft.DataProtection/backupVaults
バックアップ ポリシーの作成
コンテナーを作成したら、PostgreSQL データベースの保護に役立つバックアップ ポリシーを作成できます。 REST API を使用して PostgreSQL データベースのバックアップ ポリシーを作成することもできます。
PostgreSQL バックアップ ポリシーについて
ディスク バックアップでは 1 日に複数のバックアップが提供され、BLOB バックアップはトリガーのない 継続的 バックアップですが、PostgreSQL バックアップではアーカイブ保護が提供されます。 コンテナーに最初に送信されるバックアップ データは、定義されたルールまたはライフ サイクルに従ってアーカイブ層に移動できます。
このコンテキストでは、次の階層が PostgreSQL のバックアップ ポリシー オブジェクトを理解するのに役立ちます。
- ポリシー ルール
- バックアップ規則
- Backup パラメーター
- バックアップの種類 (この場合はデータベースの完全バックアップ)
- 初期データストア (バックアップが最初に配置される場所)
- トリガー (バックアップのトリガー方法)
- スケジュール
- 既定のタグ付け基準 (スケジュールされたすべてのバックアップを保持ルールにリンクする既定のタグ)
- Backup パラメーター
- 既定の保持ルール (既定では、初期データストア上のすべてのバックアップに適用されるルール)
- バックアップ規則
ポリシー オブジェクトは、トリガーされるバックアップの種類、バックアップのトリガー方法 (スケジュールを介して)、タグ付けされる内容、格納場所 (データストア)、データストア内のデータのライフ サイクルを定義します。
PostgreSQL の既定の PowerShell オブジェクトは、毎週 完全 バックアップをトリガーすることを示しています。 バックアップはコンテナーに到達し、3 か月間保存されます。
アーカイブ層をポリシーに追加する場合は、データをコンテナーからアーカイブに移動するタイミング、データがアーカイブに保持される期間、スケジュールされたバックアップのうち、アーカイブ可能としてタグ付けする必要があるバックアップを決定する必要があります。 コンテナー データストアからアーカイブ データストアへのバックアップ データのライフ サイクルを定義する保持ルールを追加する必要があります。 保持ルールでは、バックアップ データがアーカイブ データストアに保持される期間も定義されます。 その後、スケジュールされたバックアップをアーカイブ対象としてマークするタグを追加する必要があります。
結果の PowerShell オブジェクトは次のようになります。
- ポリシー ルール
- バックアップ規則
- Backup パラメーター
- バックアップの種類 (この場合はデータベースの完全バックアップ)
- 初期データストア (バックアップが最初に配置される場所)
- トリガー (バックアップのトリガー方法)
- スケジュール
- 既定のタグ付け基準 (スケジュールされたすべてのバックアップを保持ルールにリンクする既定のタグ)
- 同じ名前の新しい保持規則に対する新しいタグ付け条件
- Backup パラメーター
- 既定の保持ルール (既定では、初期データストア上のすべてのバックアップに適用されるルール)
- 新しい保持ルール
- ライフサイクル
- ソース データストア
- ソース データストアでの削除の期間
- ターゲット データストアにコピーする
- ライフサイクル
- バックアップ規則
ポリシー テンプレートを取得する
PostgreSQL データベース バックアップのバックアップ ポリシーの内部コンポーネントを理解するには、 Get-AzDataProtectionPolicyTemplate
コマンドを使用してポリシー テンプレートを取得します。 このコマンドは、データ ソースの種類の既定のポリシー テンプレートを返します。 このポリシー テンプレートを使用して、新しいポリシーを作成します。
$policyDefn = Get-AzDataProtectionPolicyTemplate -DatasourceType AzureDatabaseForPostgreSQL
$policyDefn | fl
DatasourceType : {Microsoft.DBforPostgreSQL/servers/databases}
ObjectType : BackupPolicy
PolicyRule : {BackupWeekly, Default}
$policyDefn.PolicyRule | fl
BackupParameter : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.AzureBackupParams
BackupParameterObjectType : AzureBackupParams
DataStoreObjectType : DataStoreInfoBase
DataStoreType : VaultStore
Name : BackupWeekly
ObjectType : AzureBackupRule
Trigger : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.ScheduleBasedTriggerCo
ntext
TriggerObjectType : ScheduleBasedTriggerContext
IsDefault : True
Lifecycle : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210701.SourceLifeCycle}
Name : Default
ObjectType : AzureRetentionRule
ポリシー テンプレートは、トリガー (バックアップのトリガーを決定する) とライフ サイクル (バックアップを削除、コピー、または移動するタイミングを決定します) で構成されます。 PostgreSQL データベース バックアップでは、トリガーの既定値はスケジュールされた毎週のトリガー (7 日ごとに 1 回のバックアップ) です。 各バックアップは 3 か月間保持されます。
$policyDefn.PolicyRule[0].Trigger | fl
ObjectType : ScheduleBasedTriggerContext
ScheduleRepeatingTimeInterval : {R/2021-08-22T02:00:00+00:00/P1W}
ScheduleTimeZone : UTC
TaggingCriterion : {Default}
$policyDefn.PolicyRule[1].Lifecycle | fl
DeleteAfterDuration : P3M
DeleteAfterObjectType : AbsoluteDeleteOption
SourceDataStoreObjectType : DataStoreInfoBase
SourceDataStoreType : VaultStore
TargetDataStoreCopySetting : {}
ポリシー テンプレートを変更する
スケジュールを変更する
既定のポリシー テンプレートでは、バックアップは週に 1 回行われます。 このスケジュールは、バックアップを週に複数日行うように変更することができます。 スケジュールを変更するには、 Edit-AzDataProtectionPolicyTriggerClientObject
コマンドを使用します。
次の例では、毎週のバックアップを毎週日曜日、水曜日、金曜日に変更します。 スケジュールの日付配列は日付を表し、その日付の曜日は曜日として扱われます。 また、これらのスケジュールが毎週繰り返されるように指定する必要があります。 そのため、スケジュール間隔は 1
され、間隔の種類は Weekly
。
$schDates = @(
(
(Get-Date -Year 2021 -Month 08 -Day 15 -Hour 22 -Minute 0 -Second 0)
),
(
(Get-Date -Year 2021 -Month 08 -Day 18 -Hour 22 -Minute 0 -Second 0)
),
(
(Get-Date -Year 2021 -Month 08 -Day 20 -Hour 22 -Minute 0 -Second 0)
)
)
$trigger = New-AzDataProtectionPolicyTriggerScheduleClientObject -ScheduleDays $schDates -IntervalType Weekly -IntervalCount 1
Edit-AzDataProtectionPolicyTriggerClientObject -Schedule $trigger -Policy $policyDefn
新しい保持規則を追加する
アーカイブ保護を追加する場合は、ポリシー テンプレートを変更する必要があります。
既定のテンプレートには、既定の保持ルールの下にある初期データストアのライフ サイクルがあります。 このシナリオでは、3 か月後にバックアップ データを削除する規則となっています。 データをアーカイブ データストアに移動するタイミングを定義する新しい保持ルールを追加する必要があります。 つまり、バックアップ データは最初にアーカイブ データストアにコピーされ、次にコンテナー データストア内で削除されます。
また、ルールでは、アーカイブ データストアにデータを保持する期間を定義する必要があります。 新しいライフ サイクルを作成するには、 New-AzDataProtectionRetentionLifeCycleClientObject
コマンドを使用します。 これらのライフ サイクルを新規または既存のルールに関連付けるには、 Edit-AzDataProtectionPolicyRetentionRuleClientObject
コマンドを使用します。
次の例では、 Monthly
という名前の新しい保持ルールを作成します。 このルールでは、毎月最初に成功したバックアップはコンテナーに 6 か月間保持され、アーカイブ層に移動され、アーカイブ層に 24 か月間保持されます。
$VaultToArchiveLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore VaultStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 6 -TargetDataStore ArchiveStore -CopyOption CopyOnExpiryOption
$OnArchiveLifeCycle = New-AzDataProtectionRetentionLifeCycleClientObject -SourceDataStore ArchiveStore -SourceRetentionDurationType Months -SourceRetentionDurationCount 24
Edit-AzDataProtectionPolicyRetentionRuleClientObject -Policy $policyDefn -Name Monthly -LifeCycles $VaultToArchiveLifeCycle, $OnArchiveLifeCycleLifeCycle -IsDefault $false
タグと関連条件を追加する
保持ルールを作成したら、バックアップ ポリシーの Trigger
プロパティに対応するタグを作成する必要があります。 新しいタグ付け基準を作成するには、 New-AzDataProtectionPolicyTagCriteriaClientObject
コマンドを使用します。 既存のタグを更新するか、新しいタグを作成するには、 Edit-AzDataProtectionPolicyTagClientObject コマンドを使用します。
次の例では、条件と共に新しいタグを作成します。これは、月の最初の正常なバックアップです。 タグの名前は、適用予定の対応する保有規則と同じです。
この例では、タグ条件の名前は次 Monthly
。
$tagCriteria = New-AzDataProtectionPolicyTagCriteriaClientObject -AbsoluteCriteria FirstOfMonth
Edit-AzDataProtectionPolicyTagClientObject -Policy $policyDefn -Name Monthly -Criteria $tagCriteria
スケジュールが週に複数のバックアップ (前の例で指定した毎週日曜日、水曜日、木曜日) であり、日曜日と金曜日のバックアップをアーカイブする場合は、次のようにタグ付け基準を変更できます。
$tagCriteria = New-AzDataProtectionPolicyTagCriteriaClientObject -DaysOfWeek @("Sunday", "Friday")
Edit-AzDataProtectionPolicyTagClientObject -Policy $policyDefn -Name Monthly -Criteria $tagCriteria
新しい PostgreSQL バックアップ ポリシーを作成する
要件に従ってテンプレートを変更した後、 New-AzDataProtectionBackupPolicy
コマンドを使用して、変更したテンプレートを使用してポリシーを作成します。
$polOss = New-AzDataProtectionBackupPolicy -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Name "TestOSSPolicy" -Policy $policyDefn
バックアップの構成
コンテナーとポリシーを作成した後、Azure Database for PostgreSQL で PostgreSQL データベースをバックアップするには、3 つの重要なポイントを考慮する必要があります。
主要エンティティを理解する
バックアップする PostgreSQL データベース
バックアップする PostgreSQL データベースの Resource Manager ID を取得します。 この ID は、データベースの識別子として機能します。 次の例では、PostgreSQL サーバー empdb11
の下に testposgresql
という名前のデータベースを使用します。このデータベースは、リソース グループossrg
別のサブスクリプションに存在します。
$ossId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/ossrg/providers/Microsoft.DBforPostgreSQL/servers/archive-postgresql-ccy/databases/empdb11"
キーボールト (Key Vault)
Azure Backup サービスは、PostgreSQL データベースに接続するためのユーザー名とパスワードは保存しません。 代わりに、バックアップ管理者はキーコンテナーに キー をシードします。 その後、Azure Backup サービスはキー コンテナーにアクセスし、キーを読み取り、データベースにアクセスします。 関連するキーのシークレット識別子をメモします。
$keyURI = "https://testkeyvaulteus.vault.azure.net/secrets/ossdbkey"
バックアップ コンテナー
Backup コンテナーを PostgreSQL サーバーに接続し、キー コンテナーに存在するキーを使用してデータベースにアクセスする必要があります。 そのため、Backup コンテナーには PostgreSQL サーバーとキー コンテナーへのアクセスが必要です。 Backup コンテナーのマネージド ID へのアクセスが許可されます。
データベースのキーが格納されている PostgreSQL サーバーと Azure Key Vault 上の Backup コンテナーのマネージド ID に付与する必要がある適切なアクセス許可について説明します。
要求を準備する
関連するすべてのアクセス許可を設定したら、次の 2 つの手順でバックアップの構成を実行します。
-
Initialize-AzDataProtectionBackupInstance
コマンドで、関連するコンテナー、ポリシー、PostgreSQL データベースを使用して要求を準備します。 -
New-AzDataProtectionBackupInstance
コマンドを使用して、データベースをバックアップする要求を送信します。
$instance = Initialize-AzDataProtectionBackupInstance -DatasourceType AzureDatabaseForPostgreSQL -DatasourceLocation $TestBkpvault.Location -PolicyId $polOss[0].Id -DatasourceId $ossId -SecretStoreURI $keyURI -SecretStoreType AzureKeyVault
ConvertTo-Json -InputObject $instance -Depth 4
New-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstance $instance
Name Type BackupInstanceName
---- ---- ------------------
ossrg-empdb11 Microsoft.DataProtection/backupVaults/backupInstances ossrg-empdb11
オンデマンド バックアップを実行する
Get-AzDataProtectionBackupInstance
コマンドを使用して、バックアップをトリガーする必要がある関連するバックアップ インスタンスをフェッチします。
$instance = Get-AzDataProtectionBackupInstance -SubscriptionId "xxxx-xxx-xxx" -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name "BackupInstanceName"
バックアップのトリガー中に保持ルールを指定できます。 ポリシー内の保持ルールを表示するには、ポリシー オブジェクトを参照します。 次の例では、 Default
という名前の規則が表示されます。 この記事では、オンデマンド バックアップの規則の例を使用します。
$ossPol.PolicyRule | fl
BackupParameter : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.AzureBackupParams
BackupParameterObjectType : AzureBackupParams
DataStoreObjectType : DataStoreInfoBase
DataStoreType : OperationalStore
Name : BackupHourly
ObjectType : AzureBackupRule
Trigger : Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.ScheduleBasedTriggerContext
TriggerObjectType : ScheduleBasedTriggerContext
IsDefault : True
Lifecycle : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SourceLifeCycle}
Name : Default
ObjectType : AzureRetentionRule
オンデマンド バックアップをトリガーするには、 Backup-AzDataProtectionBackupInstanceAdhoc
コマンドを使用します。
$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name
Backup-AzDataProtectionBackupInstanceAdhoc -BackupInstanceName $AllInstances[0].Name -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupRuleOptionRuleName "Default"
ジョブを追跡する
Get-AzDataProtectionJob
コマンドを使用して、すべてのジョブを追跡します。 すべてのジョブを一覧表示し、特定のジョブの詳細を取得できます。
Az.ResourceGraph
を使用して、すべてのバックアップ コンテナーにまたがるすべてのジョブを追跡することもできます。
Search-AzDataProtectionJobInAzGraph
コマンドを使用して、Backup ボールト間の関連ジョブを取り込みます。
$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDisk -Operation OnDemandBackup
関連コンテンツ
- Azure PowerShell を使用して PostgreSQL データベースを復元します。
- Azure portal、Azure CLI、REST API を使用して PostgreSQL データベースを復元します。