共用方式為


如何在 Azure APIM 中使用服務備份與還原實作災害復原

適用於:開發人員 |基本 |標準 |獎賞

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

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

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

本文說明如何使用外部儲存體帳戶,將 APIM 執行個體的備份與還原作業自動化。 此處顯示的步驟使用 Backup-AzApiManagementRestore-AzApiManagement Azure PowerShell Cmdlet,或 API 管理服務 - 備份和 API 管理服務- 還原 REST API。

警告

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

重要事項

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

備註

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

重要事項

API 管理服務基礎結構的變更(例如設定自定義網域、新增 CA 憑證、調整、虛擬網路設定、可用性區域變更和區域新增專案)可能需要 15 分鐘或更長的時間才能完成,視服務層級和部署大小而定。 預期具有較大縮放單位或多重區域設定的執行個體需要較長的時間。 系統會仔細執行 API 管理的輪流變更,以保留容量和可用性。

當服務正在更新時,無法進行其他服務基礎結構變更。 不過,您可以設定 API、產品、原則和用戶設定。 服務 不會 經歷閘道停機,API 管理 會繼續 服務 API 要求,而不會中斷(開發人員層除外)。

先決條件

設定儲存體帳戶存取權

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

設定儲存體帳戶存取金鑰

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

設定 APIM 受控識別

備註

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

  1. 在您的 API 管理實例中, 為 API 管理 啟用系統指派或使用者指派的受控識別。

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

備份 APIM 服務

使用 Azure PowerShell 登入

在下列範例中:

  • 名為 myapim 的 API 管理實例位於資源群組 apimresourcegroup 中。
  • 名為 backupstorageaccount 的記憶體帳戶位於資源群組 storageresourcegroup 中。 記憶體帳戶具有名為 備份的容器。
  • 將會建立名為 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

使用受控識別進行存取

若要在 API 管理實例中設定受控識別以存取記憶體帳戶,請參閱本文稍早的 設定受控識別

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

$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 的 API 管理實例會從記憶體帳戶 backupstorageaccount 中名為 ContosoBackup.apimbackup 的備份 Blob 還原。
  • 備份 Blob 位於名為 backup的容器中。

在 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

使用受控識別進行存取

若要在 API 管理實例中設定受控識別以存取記憶體帳戶,請參閱本文稍早的 設定受控識別

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

$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

條件約束

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

儲存體網路條件約束

如果記憶體帳戶已啟用防火牆,建議您使用 API 管理實例的系統指派受控識別來存取帳戶。 確保儲存帳戶 授予存取權給受信任的 Azure 服務

未備份的內容

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

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