この記事では、Azure PowerShell を使用して、Azure Backup を使用してバックアップした Azure Database for PostgreSQL サーバーに PostgreSQL データベースを復元する方法について説明します。 Azure portal、Azure CLI、REST API を使用して PostgreSQL データベースを復元することもできます。
PostgreSQL データベースはサービスとしてのプラットフォーム (PaaS) データベースであるため、既存のデータベース (バックアップが作成された場所) を置き換えて復元する Original-Location Recovery (OLR) オプションはサポートされていません。 復旧ポイントから復元して、同じ Azure Database for PostgreSQL サーバーまたは他の PostgreSQL サーバーに新しいデータベースを作成できます。 このオプションは、Alternate-Location Recovery (ALR) と呼ばれます。 ALR は、ソース データベースと復元された (新しい) データベースの両方を保持するのに役立ちます。
この記事の例では、リソース グループ TestBkpVault
の下にある testBkpVaultRG
という名前の既存の Backup コンテナーを参照します。
$TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault -ResourceGroupName "testBkpVaultRG"
PostgreSQL データベースを復元して新しく作成する
アクセス許可の設定
Backup コンテナーでは、マネージド ID を使用して他の Azure リソースにアクセスします。 バックアップから復元するには、Backup コンテナーのマネージド ID には、データベースの復元先となる Azure Database for PostgreSQL サーバーに対する一連のアクセス許可が必要です。
ターゲット PostgreSQL サーバーでコンテナーのシステム割り当てマネージド ID に関連するアクセス許可を割り当てるには、 PostgreSQL データベースのバックアップに必要な一連のアクセス許可を参照してください。
回復ポイントをファイルとしてストレージ アカウントに復元するには、バックアップ コンテナーのシステム割り当てマネージド ID がターゲット ストレージ アカウントにアクセスできる必要があります。
適切な回復ポイントを取得する
Get-AzDataProtectionBackupInstance
コマンドを使用してすべてのインスタンスをフェッチし、関連するインスタンスを識別します。
$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name
Az.Resourcegraph
と Search-AzDataProtectionBackupInstanceInAzGraph
コマンドを使用して、多くのコンテナーとサブスクリプション内のインスタンス間で復旧ポイントを検索することもできます。
$AllInstances = Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured
検索条件をフィルター処理するには、PowerShell クライアント検索機能を使用します。
Search-AzDataProtectionBackupInstanceInAzGraph -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -ProtectionStatus ProtectionConfigured | Where-Object { $_.BackupInstanceName -match "empdb11"}
インスタンスを特定したら、関連する復旧ポイントを取得します。
$rp = Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName
アーカイブ層から復旧ポイントをフェッチする必要がある場合は、クライアント フィルターを追加します。
Get-AzDataProtectionRecoveryPoint -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstanceName $AllInstances[2].BackupInstanceName | Where-Object {$_.Property.RecoveryPointDataStoresDetail[0].Type -match "Archive" }
復元要求を準備する
PostgreSQL データベースにはさまざまな復元オプションがあります。 回復ポイントを別のデータベースとして復元したり、ファイルとして復元したりすることができます。 復旧ポイントは、アーカイブ層に配置することもできます。
データベースとして復元する
作成する新しい PostgreSQL データベースの Azure Resource Manager ID を構築します ( 前述のように、アクセス許可が割り当てられたターゲット PostgreSQL サーバーを使用します)。 必要な PostgreSQL データベース名を含めます。 たとえば、PostgreSQL データベースは、別のサブスクリプションを持つリソース グループ emprestored21
の targetossserver
という名前のターゲット PostgreSQL サーバーの下にtargetrg
名前を付けることができます。
$targetOssId = /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourceGroups/targetrg/providers/providers/Microsoft.DBforPostgreSQL/servers/targetossserver/databases/emprestored21
Initialize-AzDataProtectionRestoreRequest
コマンドを使用して、関連するすべての詳細を含む復元要求を準備します。
$OssRestoreReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault
アーカイブ ベースの復旧ポイントの場合は、次の手順を実行する必要があります。
- アーカイブ データストアからコンテナー データストアにリハイドレートします。
- ソース データストアを変更します。
- リハイドレートの優先度を指定するための他のパラメーターを追加します。
- リハイドレートされた復旧ポイントをコンテナー データストアに保持する期間を指定します。
- この復旧ポイントからデータベースとして復元します。
次のコマンドを使用して、前述のすべての操作に対する要求を一度に準備します。
$OssRestoreFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType AlternateLocation -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetResourceId $targetOssId -SecretStoreURI "https://restoreoss-test.vault.azure.net/secrets/dbauth3" -SecretStoreType AzureKeyVault -RehydrationDuration 12 -RehydrationPriority Standard
ファイルとして復元
前述のように、アクセス許可が割り当てられたストレージ アカウント内のコンテナーの URI をフェッチします。 次の例では、別のサブスクリプションを持つ testcontainerrestore
という名前のストレージ アカウントの下に、testossstorageaccount
という名前のコンテナーを使用します。
$contURI = "https://testossstorageaccount.blob.core.windows.net/testcontainerrestore"
Initialize-AzDataProtectionRestoreRequest
コマンドを使用して、関連するすべての詳細を含む復元要求を準備します。
$OssRestoreAsFilesReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore VaultStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768"
アーカイブ ベースの復旧ポイントの場合は、ソース データストアを変更します。 リハイドレートされた復元ポイントのリハイドレーションの優先順位とリテンション期間 (日数) を追加します。
$OssRestoreAsFilesFromArchiveReq = Initialize-AzDataProtectionRestoreRequest -DatasourceType AzureDatabaseForPostgreSQL -SourceDataStore ArchiveStore -RestoreLocation $TestBkpVault.Location -RestoreType RestoreAsFiles -RecoveryPoint $rps[0].Property.RecoveryPointId -TargetContainerURI $contURI -FileNamePrefix "empdb11_postgresql-westus_1628853549768" -RehydrationDuration "14" -RehydrationPriority Standard
復元のトリガー
Start-AzDataProtectionBackupInstanceRestore
コマンドを使用して、前に準備した要求で復元をトリガーします。
Start-AzDataProtectionBackupInstanceRestore -BackupInstanceName $AllInstances[2].BackupInstanceName -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Parameter $OssRestoreReq
ジョブを追跡する
Get-AzDataProtectionJob
コマンドを使用してジョブを追跡します。 すべてのジョブを一覧表示し、特定のジョブの詳細を取得できます。
Az.ResourceGraph
を使用して、すべてのバックアップ コンテナーのジョブを追跡することもできます。
Search-AzDataProtectionJobInAzGraph
コマンドを使用して、すべての Backup コンテナーに関連するジョブを取得します。
$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureDatabaseForPostgreSQL -Operation OnDemandBackup