Azure API Management でサービスのバックアップと復元を使用してディザスター リカバリーを実装する方法
適用対象: Developer | Basic | Standard | Premium
Azure API Management を介して API の発行と管理を行うことで、そうしなければ手動で設計、実装、および管理する必要のある、フォールト トレランス機能やインフラストラクチャ機能を利用できるようになります。 Azure プラットフォームにより、わずかな料金で潜在的な障害の大部分が軽減されます。
API Management サービスに影響する可用性の問題から復旧するには、サービスをいつでも別のリージョンに再構成できるように準備しておく必要があります。 目標復旧時間に応じて、1 つまたは複数のリージョンでスタンバイ サービスを保持する必要がある場合があります。 また、目標復旧時間に従って、アクティブ サービスと同期されているそれらの構成と内容の維持を試みる場合があります。 API Management のバックアップと復元の機能により、ディザスター リカバリー戦略を実装するために必要な構成要素が提供されます。
また、バックアップおよび復元操作は、開発やステージングなど、運用環境間の API Management サービス構成のレプリケートで使用できます。 ユーザーやサブスクリプションなどのランタイム データも同様にコピーされ、望ましくない場合もあることに注意してください。
この記事では、外部ストレージ アカウントを使って、API Management インスタンスのバックアップと復元の操作を自動化する方法について説明します。 ここで示す手順では、Backup-AzApiManagement と Restore-AzApiManagement という Azure PowerShell コマンドレット、または API Management サービス - Backup と API Management サービス - Restore という REST API のいずれかを使います。
警告
各バックアップの有効期限は 30 日間です。 30 日の有効期限が切れた後にバックアップを復元しようとしても、"Cannot restore: backup expired
" というメッセージが表示されて復元は失敗します。
重要
復元操作では、ターゲット サービスのカスタム ホスト名の構成は変更されません。 復元操作の完了後に、シンプルな DNS CNAME の変更で、トラフィックをスタンバイ インスタンスにリダイレクトできるように、アクティブとスタンバイの両方のサービスに対して同じカスタム ホスト名と TLS 証明書を使用することをおすすめします。
注意
Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。
前提条件
API Management サービス インスタンス。 持っていない場合は、API Management サービスのインスタンスの作成に関する記事をご覧ください。
Azure ストレージ アカウント。 持っていない場合は、「ストレージ アカウントを作成する」をご覧ください。
- そのストレージ アカウントにバックアップ データを保持するためのコンテナーを作成します。
Azure PowerShell コマンドレットを使う予定の場合は、最新バージョンの Azure PowerShell。 まだインストールしていない場合は、Azure PowerShell をインストールします。
ストレージ アカウントへのアクセスを構成する
バックアップまたは復元操作を実行する場合は、ストレージ アカウントへのアクセスを構成する必要があります。 API Management では、Azure Storage アクセス キーまたは API Management マネージド ID の 2 つのストレージ アクセス メカニズムがサポートされています。
ストレージ アカウントへのアクセス キーを構成する
Azure では、ストレージ アカウントごとに 2 つの 512 ビット ストレージ アカウント アクセス キーが生成されます。 これらのキーは、共有キー認証を使用してストレージ アカウント内のデータへのアクセスする際、認証に使用されます。 キーの表示、取得、管理については、「ストレージ アカウント アクセス キーを管理する」をご覧ください。
API Management マネージド ID を構成する
注意
バックアップと復元の間のストレージ操作に対する API Management マネージド ID の使用は、API Management REST API バージョン 2021-04-01-preview
以降でサポートされています。
API Management インスタンスで、システムによって割り当てられた、またはユーザーが割り当てた API Management 用のマネージド ID を有効にします。
- ユーザー割り当てマネージド ID を有効にする場合は、ID のクライアント ID をメモします。
- 異なる API Management インスタンスにバックアップして復元する場合、ソースとターゲット インスタンスの両方でマネージド ID を有効にしてください。
バックアップと復元に使用されるストレージ アカウントを対象とするストレージ BLOB データ共同作成者ロールに ID を割り当てます。 ロールは、Azure portal または他の Azure ツールを使用して割り当てることができます。
API Management サービスのバックアップ
Azure PowerShell を使ってサインインします。
次の例で以下を実行します。
- myapim という名前の API Management インスタンスが、リソース グループ apimresourcegroup にあります。
- backuptorageaccount という名前のストレージ アカウントが、リソース グループ storageresourcegroup にあります。 ストレージ アカウントには、backups という名前のコンテナーがあります。
- バックアップ BLOB は、ContosoBackup.apimbackup という名前で作成されます。
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
マネージド ID を使用したアクセス
ストレージ アカウントにアクセスするように API Management インスタンスのマネージド ID を構成するには、この記事で前に説明したマネージド ID の構成をご覧ください。
システム割り当てマネージド ID を使用したアクセス
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName
Backup-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
-StorageContext $storageContext -TargetContainerName $containerName `
-TargetBlobName $blobName -AccessType "SystemAssignedManagedIdentity"
ユーザー割り当てマネージド ID を使用したアクセス
この例では、myidentity という名前のユーザー割り当てマネージド ID が、リソース グループ 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 ゲートウェイは要求を処理し続けますが、サービスの状態は更新中です。
API Management サービスの復元
注意事項
復元操作の進行中は、サービスの構成 (API、ポリシー、開発者ポータルの外観など) を変更しないでください。 変更が上書きされる可能性があります。
以下の例の内容は次のとおりです。
- myapim という名前の API Management インスタンスが、ストレージ アカウント 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
マネージド ID を使用したアクセス
ストレージ アカウントにアクセスするように API Management インスタンスのマネージド ID を構成するには、この記事で前に説明したマネージド ID の構成をご覧ください。
システム割り当てマネージド ID を使用したアクセス
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName
Restore-AzApiManagement -ResourceGroupName $apiManagementResourceGroup -Name $apiManagementName `
-StorageContext $storageContext -SourceContainerName $containerName `
-SourceBlobName $blobName -AccessType "SystemAssignedManagedIdentity"
ユーザー割り当てマネージド ID を使用したアクセス
この例では、myidentity という名前のユーザー割り当てマネージド ID が、リソース グループ 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 portal の [分析] ウィンドウに表示されるレポートで使用される、事前に集計されたログ データはキャプチャされません。
- クロス オリジン リソース共有 (CORS) を、ストレージ アカウントの Blob service で有効にしないでください。
- 復元先のサービスの価格レベルは、復元対象であるバックアップされたサービスの価格レベルと一致している必要があります。
ストレージ ネットワークの制約
ストレージ アカウントで ファイアウォールが有効になっている場合は、API Management インスタンスのシステム割り当てマネージド ID を使用してアカウントにアクセスすることをお勧めします。 ストレージ アカウントが信頼された Azure サービスにアクセスを許可することを確認します。
バックアップされないもの
- 分析レポートの生成に使用される使用状況データは、バックアップに含まれません。 Azure API Management REST API を使用して、分析レポートを保管用に定期的に取り出します。
- カスタム ドメインの TLS/SSL 証明書。
- お客様によってアップロードされた中間またはルートの証明書を含むカスタム CA 証明書。
- 仮想ネットワークの統合設定
- マネージド ID の構成。
- Azure Monitor 診断ログの構成。
- プロトコルと暗号の設定。
- 開発者ポータル コンテンツ。
サービス バックアップを実行する頻度は、回復ポイントの目標に影響を与えます。 その頻度を最小限に抑えるため、定期的なバックアップを実装すると共に、API Management サービスに対して変更を行った後のオンデマンドのバックアップを実行することをお勧めします。
次の手順
バックアップまたは復元プロセスについては、次の関連リソースを確認してください。
- Logic Apps を使用した API Management Backup および Restore の自動化
- Azure API Management をリージョン間で移動する方法
- API Management Premium レベルでは、ゾーン冗長もサポートされており、特定の Azure リージョン (場所) 内のサービス インスタンスに対する回復性と高可用性が提供されます。