Azure AI Searchの削除時に「manually delete the SPL resource」のメッセージが出てリソースが削除できない場合の確認ポイント

検証で利用したAzure AI Searchが削除出来ないという相談を受けたことがありました。

削除時のエラーメッセージからの原因特定に少し苦戦したので、備忘録として残しておきます。

発生したエラー

リソースを削除しようとすると、以下のようなエラーが表示され、削除が出来ません。

<サービス名>: Unable to delete Search Service: '<サービス名>?'. LockedSPLResourceFound: Unable to verify management locks on Resource '/subscriptions/<subscription ID>/resourceGroups/<リソースグループ名>/providers/Microsoft.Storage/storageAccounts/<ストレージアカウント名>'. If you still want to delete the search service, manually delete the SPL resource first and try again. RequestId: <リクエスト ID> (コード: ConflictError)

Microsoft.Storage/storageAccounts/<ストレージアカウント名>の部分は、後述するリンクを設定していたリソースによって異なります

エラーメッセージ内に「manually delete the SPL resource」という表記があったのですが、「SPL resource」を指すものがなかなか見つけられず苦戦しました。

原因

「共有プライベート リンク」が残っていたことが原因でした。

エラーメッセージの「SPL」は「shared private link(共有プライベート リンク)」の略だったようです。

解決方法

まず、共有プライベート リンクを選択して削除します。

その後、改めてAzure AI Searchを削除すると、問題なく削除できました。

参考:特定に至った情報

エラーメッセージから、何らかの依存リソースを先に消す必要がありそうだ、というところまでは推測できたので、「テンプレートのエクスポート」からリソースを探しました。

エクスポートしたARMテンプレートの例です。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "searchServices_f<リソース名>_name": {
            "defaultValue": "<リソース名>",
            "type": "String"
        },
        "storageAccounts_<リソース名>_externalid": {
            "defaultValue": "/subscriptions/<subscription ID>/resourceGroups/<リソースグループ名>/providers/Microsoft.Storage/storageAccounts/<リソース名>",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Search/searchServices",
            "apiVersion": "2024-06-01-preview",
            "name": "[parameters('searchServices_<リソース名>_name')]",
            "location": "East Asia",
            "sku": {
                "name": "standard2"
            },
            "properties": {
                "replicaCount": 1,
                "partitionCount": 1,
                "hostingMode": "Default",
                "publicNetworkAccess": "Enabled",
                "networkRuleSet": {
                    "ipRules": [],
                    "bypass": "None"
                },
                "encryptionWithCmk": {
                    "enforcement": "Unspecified"
                },
                "disableLocalAuth": false,
                "authOptions": {
                    "apiKeyOnly": {}
                },
                "disabledDataExfiltrationOptions": [],
                "semanticSearch": "free"
            }
        },
        {
            "type": "Microsoft.Search/searchServices/sharedPrivateLinkResources",
            "apiVersion": "2024-06-01-preview",
            "name": "[concat(parameters('searchServices_<リソース名>_name'), '/<共有プライベートリンクの名称>')]",
            "dependsOn": [
                "[resourceId('Microsoft.Search/searchServices', parameters('searchServices_<リソース名>_name'))]"
            ],
            "properties": {
                "privateLinkResourceId": "[parameters('storageAccounts_<リソース名>_externalid')]",
                "groupId": "blob",
                "requestMessage": "test",
                "status": "Pending",
                "provisioningState": "Succeeded"
            }
        }
    ]
}

ここに「Microsoft.Search/searchServices/sharedPrivateLinkResources」というリソースがあったので、「SPL resource」=「sharedPrivateLinkResources」=「共有プライベート リンク」だと判明しました。

おわりに

エラーメッセージの「SPL resource」だけではリソースの特定が出来なかったので原因特定に少し時間がかかってしまいました。

同じエラーメッセージで困っている方の参考になれば幸いです。

執筆担当者プロフィール
舟越 匠

舟越 匠(日本ビジネスシステムズ株式会社)

人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。2024年8月からキーマンズネットPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。

担当記事一覧