如何在 Azure API 管理中使用服務備份和還原來實作災害復原

適用於:開發人員 |基本 |標準 |進階版

透過 Azure API 管理來發佈及管理 API,您將能夠利用非 Azure API 管理使用者要另行手動設計、實作及管理的容錯和基礎結構功能。 Azure 平台可緩和絕大部分可能的失敗後果,且成本低廉。

若要從影響您 APIM 服務的可用性問題復原,請隨時準備好在另一個區域中重新建構您的服務。 根據您的復原時間目標,建議您在一或多個區域中保留待命服務。 您也可以嘗試根據您的復原點目標,將其設定和內容保持與作用中的服務同步。 APIM 備份與還原功能可提供實作災害復原策略時必要的建置組塊。

備份和還原作業也可用於複寫作業環境之間的 API 管理服務設定,例如開發和暫存。 請注意,也會複製使用者和訂閱等執行階段資料,這不一定是理想的做法。

本文說明如何使用外部儲存體帳戶,將 APIM 執行個體的備份和還原作業自動化。 這裡顯示的步驟會使用 Backup-AzApiManagementRestore-AzApiManagement Azure PowerShell Cmdlet,或 Api Management Service - BackupApi Management Service - Restore REST API。

警告

每個備份會在 30 天後到期。 如果您在過了 30 天的到期時間後嘗試還原備份,還原會失敗並傳回 Cannot restore: backup expired 訊息。

重要

還原作業不會變更目標服務的自訂主機名稱設定。 我們建議針對作用中和待命服務使用相同的自訂主機名稱和 TLS 憑證,如此一來,在還原作業完成之後,就可以透過簡單的 DNS CNAME 變更,將流量重新導向待命執行個體。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

必要條件

設定儲存體帳戶存取權

執行備份或還原作業時,您必須設定儲存體帳戶的存取權。 APIM 支援兩種儲存體存取機制:Azure 儲存體存取金鑰或 APIM 受控識別。

設定儲存體帳戶存取金鑰

Azure 會為每個儲存體帳戶產生兩個 512 位元儲存體帳戶存取金鑰。 您可以透過共用金鑰授權,使用這些金鑰來授與儲存體帳戶中的資料存取權。 若要檢視、擷取和管理金鑰,請參閱管理儲存體帳戶存取金鑰

設定 API 管理受控識別

注意

在備份和還原期間,針對儲存體作業使用 APIM 受控識別,在 APIM REST API 版本 2021-04-01-preview 或更新版本中受支援。

  1. 在 API 管理執行個體中,啟用系統指派或使用者指派之適用於 API 管理的受控識別

    • 如果您啟用使用者指派的受控識別,請記下身分識別的用戶端識別碼
    • 如果您要備份並還原至不同的 API 管理執行個體,請在來源和目標執行個體中啟用受控識別。
  2. 儲存體 Blob 資料參與者角色身分識別指派給儲存體帳戶,以用於備份和還原。 若要指派角色,請使用 Azure 入口網站或其他 Azure 工具。

備份 APIM 服務

使用 Azure PowerShell 登入

在下列範例中:

  • 名為 myapim 的 APIM 執行個體位於資源群組 apimresourcegroup 中。
  • 名為 backupstorageaccount 的儲存體帳戶位於資源群組 storageresourcegroup 中。 儲存體帳戶具有名為 backups 的容器。
  • 將會建立名為 ContosoBackup.apimbackup 的備份 Blob。

在 PowerShell 中設定變數:

$apiManagementName="myapim";
$apiManagementResourceGroup="apimresourcegroup";
$storageAccountName="backupstorageaccount";
$storageResourceGroup="storageresourcegroup";
$containerName="backups";
$blobName="ContosoBackup.apimbackup"

使用儲存體存取金鑰進行存取

$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageResourceGroup -StorageAccountName $storageAccountName)[0].Value

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey

Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -TargetContainerName $containerName -TargetBlobName $blobName

使用受控識別進行存取

若要在 APIM 執行個體中設定受控識別來存取儲存體帳戶,請參閱本文稍早的設定受控識別

使用系統指派的受控識別進行存取

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -TargetContainerName $containerName `
    -TargetBlobName $blobName -AccessType "SystemAssignedManagedIdentity"

使用使用者指派的受控識別進行存取

在此範例中,名為 myidentity 的使用者指派受控識別位於資源群組 identityresourcegroup中。

$identityName = "myidentity";
$identityResourceGroup = "identityresourcegroup";

$identityId = (Get-AzUserAssignedIdentity -Name $identityName -ResourceGroupName $identityResourceGroup).ClientId

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -TargetContainerName $containerName `
    -TargetBlobName $blobName -AccessType "UserAssignedManagedIdentity" ` -identityClientId $identityid

備份作業的執行時間較長,因此可能需要數分鐘的時間才能完成。 在此期間,API 閘道會繼續處理要求,但服務的狀態是「正在更新」。

還原 APIM 服務

警告

避免在還原作業進行時針對服務組態 (例如 API、原則、開發人員入口網站外觀) 進行變更。 變更可能會遭到覆寫

在下列範例中,

  • 名為 myapim 的 APIM 執行個體會從儲存體帳戶 backupstorageaccount 中名為 ContosoBackup.apimbackup 的備份 Blob 還原。
  • 備份 Blob 位於名為 backups 的容器中。

在 PowerShell 中設定變數:

$apiManagementName="myapim";
$apiManagementResourceGroup="apimresourcegroup";
$storageAccountName="backupstorageaccount";
$storageResourceGroup="storageresourcegroup";
$containerName="backups";
$blobName="ContosoBackup.apimbackup"

使用儲存體存取金鑰進行存取

$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageResourceGroup -StorageAccountName $storageAccountName)[0].Value

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageKey

Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -SourceContainerName $containerName -SourceBlobName $blobName

使用受控識別進行存取

若要在 APIM 執行個體中設定受控識別來存取儲存體帳戶,請參閱本文稍早的設定受控識別

使用系統指派的受控識別進行存取

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -SourceContainerName $containerName `
    -SourceBlobName $blobName -AccessType "SystemAssignedManagedIdentity"

使用使用者指派的受控識別進行存取

在此範例中,名為 myidentity 的使用者指派受控識別位於資源群組 identityresourcegroup中。

$identityName = "myidentity";
$identityResourceGroup = "identityresourcegroup";

$identityId = (Get-AzUserAssignedIdentity -Name $identityName -ResourceGroupName $identityResourceGroup).ClientId

$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName

Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
    -StorageContext $storageContext -SourceContainerName $containerName `
    -SourceBlobName $blobName -AccessType "UserAssignedManagedIdentity" ` -identityClientId $identityid

還原作業的執行時間較長,因此可能需要 45 分鐘以上的時間才能完成。

限制

  • 備份還原的保證僅限建立後的 30 天內
  • 備份進行時,請避免服務中的管理變更,例如定價層升級或降級、變更網域名稱等等。
  • 在備份作業進行時針對服務設定 (例如 API、原則及開發人員入口網站外觀) 所做的變更可能會從備份中排除,因此可能會遺失
  • 備份不會擷取 Azure 入口網站的 [分析] 視窗上所顯示報表中使用的預先彙總記錄資料。
  • 跨原始來源資源共用 (CORS)不應該在儲存體帳戶中的 Blob 服務上啟用。
  • 要還原之服務的定價層必須符合所要還原之已備份服務的定價層。

儲存體網路限制式

如果儲存體帳戶已啟用防火牆,則建議您使用 APIM 執行個體的系統指派受控識別來存取帳戶。 確定儲存體帳戶會授與受信任 Azure 服務的存取權

未備份的內容

執行服務備份的頻率會影響您的復原點目標。 為了盡可能縮小,建議您實作定期備份,並在針對 API 管理服務進行變更後執行隨選備份。

下一步

請參閱下列相關資源,以了解備份/還原程序: