使用 Azure PowerShell 備份儲存帳戶中的所有 Azure Blob 儲存物件

此文章描述如何使用 Azure PowerShell 來備份儲存體帳戶中的所有 Azure Blob。 您現在可以執行操作和保存庫 (部分機器翻譯) 的備份,以使用 Azure 備份來保護儲存體帳戶中的區塊 Blob。 您也可以 使用 REST API 設定備份

如需 Azure Blob 區域可用性、支援案例和限制的相關資訊,請參閱支援矩陣。

重要

從 Az 5.9.0 版開始支援 Azure Blob。 若要設定現有及未來容器的自動保護,請安裝 Az.DataProtection 3.0.1 或更新版本。

在您開始之前

開始之前,請參閱必要條件和支援矩陣。

建立備份保存庫

備份保存庫是 Azure 中的儲存體實體,可保存 Azure 備份所支援各種較新工作負載的備份資料,例如適用於 PostgreSQL 伺服器的 Azure 資料庫和 Azure blob。 保存庫可讓您輕鬆組織備份資料,同時可減輕管理負擔。 備份保存庫會以 Azure 的 Azure Resource Manager 模型為基礎,可提供增強功能來協助保護備份資料。

在建立備份保存庫之前,請先選取保存庫中數據的儲存體備援選項。 然後,繼續使用該儲存體備援和位置來建立備份保存庫。 在此文章中,我們將在區域 westus 中的資源群組 testBkpVaultRG 下方,建立備份保存庫 TestBkpVault。 使用 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

建立保存庫之後,讓我們建立備份原則來保護 Azure Blob。

重要

雖然您將看到保存庫的備份儲存體備援,但該備援不會套用至 Blob 的作業備份,因為備份本質上是本機,而且不會在備份保存庫中儲存任何資料。 在這裡,備份保存庫是管理實體,可協助您管理儲存體帳戶中區塊 Blob 的保護。

建立備份原則

選擇備份階層:

重要

請先閱讀此節,然後再繼續建立原則並設定 Azure Blob 的備份。

若要了解 Azure Blob 備份之備份原則的內部元件,請使用 Get-AzDataProtectionPolicyTemplate 命令來擷取原則範本。 此命令會傳回指定資料來源類型的預設原則範本。 使用此原則範本來建立新的原則。

$policyDefn = Get-AzDataProtectionPolicyTemplate -DatasourceType AzureBlob
$policyDefn | fl


DatasourceType : {Microsoft.Storage/storageAccounts/blobServices}
ObjectType     : BackupPolicy
PolicyRule     : {Default}

$policyDefn.PolicyRule | fl

IsDefault  : True
Lifecycle  : {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api202101.SourceLifeCycle}
Name       : Default
ObjectType : AzureRetentionRule

此原則範本僅由生命週期所組成 (其決定何時刪除/複製/移動備份)。 由於 Blob 的作業備份本質上是連續的,因此您不需要排程執行備份。

$policyDefn.PolicyRule.Lifecycle | fl


DeleteAfterDuration        : P30D
DeleteAfterObjectType      : AbsoluteDeleteOption
SourceDataStoreObjectType  : DataStoreInfoBase
SourceDataStoreType        : OperationalStore
TargetDataStoreCopySetting :

附註

若還原期間較長,可能會導致還原作業需要較久時間才能完成。 此外,還原一組資料所需的時間,取決於在還原期間所進行的寫入和刪除作業數目。 例如,假設有個帳戶包含一百萬個物件,而且每日會新增 3,000 個物件並刪除 1,000 個物件,則大約需要兩小時,才能還原至過去 30 天的某個時間點。

對於具有此變動率的帳戶,不建議保留期間和還原超過前 90 天。

當原則物件具有所有需要的值之後,使用 New-AzDataProtectionBackupPolicy 命令,繼續從原則物件建立新的原則。

New-AzDataProtectionBackupPolicy -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name blobBkpPolicy -Policy $policyDefn

Name                   Type
----                   ----
blobBkpPolicy       Microsoft.DataProtection/backupVaults/backupPolicies

$blobBkpPol = Get-AzDataProtectionBackupPolicy -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name "blobBkpPolicy"

設定備份

建立保存庫和原則後,您必須考慮兩項重點,以便保護儲存體帳戶內的所有 Azure Blob。

  • 主要實體
  • 權限

主要實體

  • 包含所要保護 Blob 的儲存體帳戶:擷取包含所要保護 Blob 儲存體帳戶的 Azure Resource Manager 識別碼。 這將作為儲存體帳戶的識別碼。 我們將使用不同訂用帳戶中資源群組 blobrg 下方名為 PSTestSA 的儲存體帳戶做為範例。

    $SAId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/blobrg/providers/Microsoft.Storage/storageAccounts/PSTestSA"
    
  • 備份保存庫:備份保存庫需要儲存體帳戶的權限,才能在儲存體帳戶內現存的 Blob 上啟用備份。 您會使用保存庫的系統指派的受控識別來指派這類權限。

指派權限

您必須透過 Azure RBAC,將一些權限指派給所建立的保存庫 (以保存庫 MSI 表示) 及相關的儲存體帳戶。 您可以透過入口網站或 PowerShell 來執行這些作業。 深入了解所有相關的權限。

準備要求來設定 blob 備份

選擇備份階層:

設定所有相關的權限之後,請以 2 個步驟來執行備份的設定。 首先,使用 Initialize-AzDataProtectionBackupInstance 命令,利用相關的保存庫、原則、儲存體帳戶來準備相關要求。 然後,使用 New-AzDataProtectionBackupInstance 命令來提交要求,以保護儲存體帳戶中的 Blob。

$instance = Initialize-AzDataProtectionBackupInstance -DatasourceType AzureBlob -DatasourceLocation $TestBkpvault.Location -PolicyId $blobBkpPol[0].Id -DatasourceId $SAId 
New-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstance $instance

Name                                                       Type                                                  BackupInstanceName
----                                                       ----                                                  ------------------
blobrg-PSTestSA-3df6ac08-9496-4839-8fb5-8b78e594f166 Microsoft.DataProtection/backupVaults/backupInstances blobrg-PSTestSA-3df6ac08-9496-4839-8fb5-8b78e594f166

重要

為 Blob 備份設定儲存體帳戶之後,有一些功能會受到影響,例如,變更摘要和刪除鎖定。 深入了解。

更新備份實例

設定備份後,你可以用備份實例更改相關政策。 對於保存庫備份,您也可以變更選取備份的容器,或選擇自動保護容器至支援的上限。 所有現有及未來容器的自動保護是永久性的,且無法回到先前的容器選擇選項。

若要更新備份實例,請執行下列 Cmdlet:

  1. 使用 Test-AzDataProtectionBackupInstanceReadiness 命令來驗證備份實例是否已準備好設定備份。 如果備份實例尚未就緒,命令就會失敗。

    您也可以使用此命令來檢查備份保存庫是否有設定備份所需的所有許可權。

  2. 使用 Update-AzDataProtectionBackupInstance 變更用來備份 Azure Blob 的原則。 指定相關的備份項目和新的備份原則。

  3. 將策略或新的容器更新至現有的備份專案。 若啟用自動保護,新容器會自動受到保護,直到受保護容器數量達到 1000 個為止。

    1. 使用 New-AzStorageContext Cmdlet 建立儲存體帳戶內容。 -UseConnectedAccount提供 參數,以便使用您的 Microsoft Entra 認證來執行數據作業。 深入瞭解 記憶體帳戶命令。

      Create a context object using Azure AD credentials
      $ctx = New-AzStorageContext -StorageAccountName xxx -UseConnectedAccount 
      
      
    2. 使用 Get-AzStorageContainer Cmdlet 提取儲存容器。 若要擷取單一容器,請提供 -Name 參數。 若要傳回以指定字元字串開頭的容器清單,請指定 -Prefix 參數的值。

    下列範例會擷取個別容器和容器資源清單:

    
    
    # Create variables
    $containerName  = "individual-container"
    $prefixName     = "loop-"
    
    # Approach 1: Retrieve an individual container
    Get-AzStorageContainer -Name $containerName -Context $ctx
    Write-Host
    
    # Approach 2: Retrieve a list of containers
    $targetContainers = Get-AzStorageContainer -Context $ctx | Where-Object { $_.Name -match "cont" } 
    

    結果會提供 Blob 端點的 URI,並列出依名稱和前置詞擷取的容器:

    Storage Account Name: demostorageaccount
    
    Name                 PublicAccess         LastModified                   IsDeleted  VersionId        
    ----                 ------------         ------------                   ---------  ---------        
    individual-container                      11/2/2021 5:52:08 PM +00:00                                
    
    loop-container1                           11/2/2021 12:22:00 AM +00:00                               
    loop-container2                           11/2/2021 12:22:00 AM +00:00                               
    
    loop-container1                           11/2/2021 12:22:00 AM +00:00                               
    loop-container2                           11/2/2021 12:22:00 AM +00:00
    loop-container3                           11/2/2021 12:22:00 AM +00:00   True       01D7E7129FDBD7D4
    loop-container4                           11/2/2021 12:22:00 AM +00:00   True       01D7E8A5EF01C787 
    
    1. 擷取需要更新的備份實例。

      C:\Users\testuser> $instance = Search-AzDataProtectionBackupInstanceInAzGraph -Subscription "Demosub" -ResourceGroup Demo-BCDR-RG -Vault BCDR-BV-EastUS -DatasourceType AzureBlob
      PS C:\Users\testuser> $instance
                     Output
      Name                                                                     BackupInstanceName
      ----                                                                     ------------------
      blobsa-blobsa-c7325e08-980d-43b2-863f-68feee4fd03c               blobsa-blobsa-c7325e08-980d-43b2-863f-68feee4fd03c
      blobsavaulted-blobsavaulted-40c36519-f422-45aa-bbeb-3f0eedb440c7 blobsavaulted-blobsavaulted-40c36519-f422-45aa-bbeb-3f0eedb440c7
      testdpp-testdpp-ff4254dd-7a70-437b-9a10-8c0d2223d037                     testdpp-testdpp-ff4254dd-7a70-437b-9a10-8c0d2223d037
      
      
    2. 擷取您想要在備份執行個體中更新、名稱為 vaulted-policy 的備份原則。 您也可以擷取需要在備份執行個體中更新的新原則。

      $updatePolicy = Get-AzDataProtectionBackupPolicy -SubscriptionId "Demosub" -VaultName BCDR-BV-EastUS -ResourceGroupName Demo-BCDR-RG -name continer-1
      
    3. 當你明確選擇備份容器時,請用新的容器清單更新備份實例。

      PS C:\Users\testuser> $updateBI = Update-AzDataProtectionBackupInstance -ResourceGroupName Daya-BCDR-RG -VaultName DPBCDR-BV-EastUS -BackupInstanceName $instance[0].Name -SubscriptionId "ef4ab5a7-c2c0-4304-af80-af49f48af3d1"  -PolicyId $updatePolicy.id -VaultedBackupContainer $targetContainers.name
      
      
      PS C:\Users\testuser> $updateBI.Property.PolicyInfo.PolicyId
      /subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/Daya-BCDR-RG/providers/Microsoft.DataProtection/backupVaults/DPBCDR-BV-EastUS/backupPolicies/continerdeltest-1
      PS C:\Users\testuser> $updateBI.Property.PolicyInfo.PolicyParameter.BackupDatasourceParametersList[0].ContainersList
      cont-01
      cont-02
      cont-03
      cont-04
      cont-05
      cont-06
      cont-07
      cont-08
      cont-09
      cont-10
      cont-11
      

下一步

使用 Azure PowerShell 還原 Azure Blob。

使用 Azure portal、Azure CLI 和 REST API,透過 Azure 備份還原 Azure Blob。