次の方法で共有


Azure PowerShell を使用して PostgreSQL データベースをバックアップする

この記事では、Azure PowerShell を使用して Azure Database for PostgreSQL をバックアップする方法について説明します。 Azure portalAzure 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 パラメーター
        • バックアップの種類 (この場合はデータベースの完全バックアップ)
        • 初期データストア (バックアップが最初に配置される場所)
        • トリガー (バックアップのトリガー方法)
          • スケジュール
          • 既定のタグ付け基準 (スケジュールされたすべてのバックアップを保持ルールにリンクする既定のタグ)
    • 既定の保持ルール (既定では、初期データストア上のすべてのバックアップに適用されるルール)

ポリシー オブジェクトは、トリガーされるバックアップの種類、バックアップのトリガー方法 (スケジュールを介して)、タグ付けされる内容、格納場所 (データストア)、データストア内のデータのライフ サイクルを定義します。

PostgreSQL の既定の PowerShell オブジェクトは、毎週 完全 バックアップをトリガーすることを示しています。 バックアップはコンテナーに到達し、3 か月間保存されます。

アーカイブ層をポリシーに追加する場合は、データをコンテナーからアーカイブに移動するタイミング、データがアーカイブに保持される期間、スケジュールされたバックアップのうち、アーカイブ可能としてタグ付けする必要があるバックアップを決定する必要があります。 コンテナー データストアからアーカイブ データストアへのバックアップ データのライフ サイクルを定義する保持ルールを追加する必要があります。 保持ルールでは、バックアップ データがアーカイブ データストアに保持される期間も定義されます。 その後、スケジュールされたバックアップをアーカイブ対象としてマークするタグを追加する必要があります。

結果の PowerShell オブジェクトは次のようになります。

  • ポリシー ルール
    • バックアップ規則
      • 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 つの手順でバックアップの構成を実行します。

  1. Initialize-AzDataProtectionBackupInstance コマンドで、関連するコンテナー、ポリシー、PostgreSQL データベースを使用して要求を準備します。
  2. 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