API Management内のAPIの移行に思いのほか手間取った
2020-06-30
azblob://2022/11/11/eyecatch/2020-06-30-api-management-within-api-migration-000.jpg

名古屋事業所の多田です。

APIの移行をしようとして、最終的にバックアップ・リストアに落ち着いたことがあったので、その手順についてご紹介します。

最初は・・・

エクスポート・インポート機能を使用して、API Management サービス内にある API の移行を実施する予定だったのですが、肝心のインポートがエラーによりできず、移行したい API を持ってこれませんでした。

そのため、代案としてバックアップ・リストアの機能を使用した・・・という背景があります。

ただし、APIだけでなく、API Managementそのものが更新される点に注意する必要があります。

実行環境

ローカル

  • AzurePowerShell
    • Az モジュール  :ver4.3.0(4.2.0以下は未検証)

ポータル

  • バックアップ先となる API Management サービス
  • リストア先となる API Management サービス
    • 異なる名称で作成します

1. バックアップ

1.1 ストレージアカウントの作成

移行元のバックアップデータを格納するストレージアカウントを作成します。

  • 環境毎に以下の値を置き換えます
    • "StorageAccountName"
    • "LocationName"
    • "ResouceGroupName"
New-AzStorageAccount `
    -StorageAccountName "StorageAccountName" `
    -Location "LocationName" `
    -ResourceGroupName "ResouceGroupName" `
    -Type Standard_LRS

1.2 コンテキストの作成

バックアップに使用するストレージアカウントのコンテキストを作成します。

  • 環境毎に以下の値を置き換えます
    • "StorageAccountName"
    • "ResouceGroupName"
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName "ResouceGroupName" -StorageAccountName "StorageAccountName")[0].Value

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

1.3 API Management バックアップ

移行元となる API Management サービスを、作成したストレージアカウントにバックアップします。
Container と Blob は既存になければ新規作成されます。

  • 環境毎に以下の値を置き換えます
    • "BackupSource ResouceGroupName"
    • "BackupSource API ManagementServiceName"
    • "BackupTarget ContainerName"
    • "BackupTarget BlobName"
Backup-AzApiManagement `
    -ResourceGroupName "BackupSource ResouceGroupName" `
    -Name "BackupSource API ManagementServiceName" `
    -StorageContext $StorageContext `
    -TargetContainerName "BackupTarget ContainerName" `
    -TargetBlobName "BackupTarget BlobName"

2. リストア

2.1 API Management リストア

移行先となる API Management サービスを、リストアして更新します。

  • 環境毎に以下の値を置き換えます
    • "RestoreTarget ResouceGroupName"
    • "RestoreTarget API ManagementServiceName"
    • "BackupSource ContainerName"
    • "BackupSource BlobName"
Restore-AzApiManagement `
    -ResourceGroupName "RestoreTarget ResouceGroupName" `
    -Name "RestoreTarget API ManagementServiceName" `
    -StorageContext $StorageContext `
    -SourceContainerName "BackupSource ContainerName" `
    -SourceBlobName "BackupSource BlobName"

3. 作成後

ポータルの API Management サービスを開き、ブレードにある「Network connectivity status」にエラーが表示されている場合はしばらく様子を見ます。

20分ぐらいで消えるはず・・・。
解消されていれば問題ありません。

ソース管理
SCM
An error occurred while sending the request.

参考

Backup-AzApiManagement
https://docs.microsoft.com/en-us/powershell/module/az.apimanagement/Backup-AzApiManagement?view=azps-4.3.0&viewFallbackFrom=azps-4.3.0)

Restore-AzApiManagement
https://docs.microsoft.com/en-us/powershell/module/az.apimanagement/Restore-AzApiManagement?view=azps-4.3.0