如何在 Azure API 管理中使用服務備份和還原來實作災害復原
適用於:開發人員 | 基本 | 標準 | 進階
透過 Azure API 管理來發佈及管理 API,您將能夠利用非 Azure API 管理使用者要另行手動設計、實作及管理的容錯和基礎結構功能。 Azure 平台可緩和絕大部分可能的失敗後果,且成本低廉。
若要從影響您 APIM 服務的可用性問題復原,請隨時準備好在另一個區域中重新建構您的服務。 根據您的復原時間目標,建議您在一或多個區域中保留待命服務。 您也可以嘗試根據您的復原點目標,將其設定和內容保持與作用中的服務同步。 APIM 備份與還原功能可提供實作災害復原策略時必要的建置組塊。
備份和還原作業也可用於複寫作業環境之間的 API 管理服務設定,例如開發和暫存。 請注意,也會複製使用者和訂閱等執行階段資料,這不一定是理想的做法。
本文說明如何使用外部儲存體帳戶,將 APIM 執行個體的備份和還原作業自動化。 這裡顯示的步驟會使用 Backup-AzApiManagement 和 Restore-AzApiManagement Azure PowerShell Cmdlet,或 Api Management Service - Backup 和 Api 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。
必要條件
API 管理服務執行個體。 如果您沒有,請參閱建立 APIM 服務執行個體。
一個 Azure 儲存體帳戶。 如果您還沒有儲存體帳戶,請參閱建立一個儲存體帳戶。
- 在儲存體帳戶中建立容器來保存備份資料。
如果您打算使用 Azure PowerShell Cmdlet,則為最新版本的 Azure PowerShell。 安裝 Azure PowerShell (如果尚未安裝)。
設定儲存體帳戶存取權
執行備份或還原作業時,您必須設定儲存體帳戶的存取權。 APIM 支援兩種儲存體存取機制:Azure 儲存體存取金鑰或 APIM 受控識別。
設定儲存體帳戶存取金鑰
Azure 會為每個儲存體帳戶產生兩個 512 位元儲存體帳戶存取金鑰。 您可以透過共用金鑰授權,使用這些金鑰來授與儲存體帳戶中的資料存取權。 若要檢視、擷取和管理金鑰,請參閱管理儲存體帳戶存取金鑰。
設定 API 管理受控識別
注意
在備份和還原期間,針對儲存體作業使用 APIM 受控識別,在 APIM REST API 版本 2021-04-01-preview
或更新版本中受支援。
在 API 管理執行個體中,啟用系統指派或使用者指派之適用於 API 管理的受控識別。
- 如果您啟用使用者指派的受控識別,請記下身分識別的用戶端識別碼。
- 如果您要備份並還原至不同的 API 管理執行個體,請在來源和目標執行個體中啟用受控識別。
將儲存體 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 服務的存取權。
未備份的內容
- 備份不包含用來建立分析報告的使用量資料。 請使用 Azure API 管理 REST API 來定期擷取分析報告,以利妥善保存。
- 自訂網域 TLS/SSL 憑證。
- 自訂 CA 憑證,其中包含客戶上傳的中繼憑證或根憑證。
- 虛擬網路整合設定。
- 受控識別設定。
- Azure 監視器診斷設定。
- 通訊協定和加密設定。
- 開發人員入口網站內容。
執行服務備份的頻率會影響您的復原點目標。 為了盡可能縮小,建議您實作定期備份,並在針對 API 管理服務進行變更後執行隨選備份。
下一步
請參閱下列相關資源,以了解備份/還原程序:
- 使用 Logic Apps 將 API 管理備份與還原自動化 \(英文\)
- 如何跨區域移動 Azure API 管理
- API 管理進階層也支援區域備援,可為特定 Azure 區域 (位置) 中的服務執行個體提供復原和高可用性。