Azure API Management 作成時における同名エラーの対処法 #Azure リレー

チェリオの自販機が好きな多田です。2年近く忘れてた温めておいたネタを記事にしました。

はじめに

Azure API Management(APIM)を削除後同じ名前で作成しようとすると、「指定されたサービス名は既に使用されています」とメッセージが出てエラーになるんですよね。一応48時間経てば同じ名前でも使用できるようになります。この記事は待ちきれない方向けです。

結論を言うと、論理的に削除されている状態のAPIMを RESTAPIを使って完全に削除します。ただ最近だと、PowerShellやAzureCLIでも完全削除ができるようになったみたいなのでそちらでもいいと思います。(試しにやってみたんですが論理削除になってしまうので今は封印かも)

詳細:https://docs.microsoft.com/ja-jp/azure/api-management/soft-delete

トークンの取得

RESTAPIを実行するために、まずはアクセストークンを取得します。
以下コマンドで取得可能です。

az login -t {テナントID}
az account set -s {サブスクリプションID}
$token = az account get-access-token --resource-type arm | ConvertFrom-Json 

削除リクエスト

ここではPowerShellで実行するものとしています。

リクエスト先URLの設定

servicenameにはAPIMの名前を指定します。東日本でAPIMを作成していた場合、locationにはJapan Eastを指定します。

$url = "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.ApiManagement/locations/{location}/deletedservices/{serviceName}?api-version=2021-08-01"

リンク先の下記文言が気になりますが、現状api-version=2021-08-01でも完全削除は可能みたいです。

Azure portal または REST API のバージョン 2020-06-01-preview 以降を使用して API Management インスタンスを削除すると、論理的な削除が行われます。
2020-06-01-preview よりも前の REST API バージョンを使用して API Management インスタンスを削除すると、完全な削除が行われます。

詳細:https://docs.microsoft.com/ja-jp/azure/api-management/soft-delete

削除リクエスト

削除のリクエストを送って通ればOKです。完全削除が開始されます。しばらく待った後同じ名前でAPIMを作成可能になっていればOKです。

Invoke-RestMethod -Method Delete -Uri $url -Headers @{"Authorization"="Bearer "+$token.accessToken}

備考

下記は論理的に削除されたすべてのAPIMを一覧表示するコマンドです。対象のAPIM名が結果に出力されなければ完全削除されてます。

$url = "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.ApiManagement/deletedservices?api-version=2021-08-01"
Invoke-RestMethod -Method Get -Uri $url -Headers @{"Authorization"="Bearer "+$token.accessToken}