共用方式為


解決找不到資源的錯誤

本文說明您在作業期間找不到資源時看到的錯誤。 一般而言,使用 Bicep 檔案或 Azure Resource Manager 範本部署資源時,您會看到此錯誤(ARM 範本)。 當您執行管理工作和 Azure Resource Manager 找不到所需的資源時,也會看到此錯誤。 例如,如果您嘗試將標籤新增至不存在的資源,您會收到此錯誤。

癥狀

有兩個錯誤碼表示找不到資源。 錯誤 NotFound 會傳回類似下列的結果:

Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.

錯誤 ResourceNotFound 會傳回類似下列的結果:

Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.

原因

Resource Manager 需要擷取資源的屬性,但找不到訂用帳戶中的資源。

解決方案 1:檢查資源屬性

當您在執行管理工作過程中收到此錯誤時,請檢查您為資源提供的值。 要檢查的三個值為:

  • 資源名稱
  • 資源群組名稱
  • 訂閱

如果您使用PowerShell或 Azure CLI,請檢查您是否正在包含資源的訂用帳戶中執行命令。 您可以使用 Set-AzContextaz account set 來變更訂用帳戶。 許多命令都提供訂用帳戶參數,可讓您指定與目前內容不同的訂用帳戶。

如果您無法驗證屬性,請登入 Microsoft Azure 入口網站。 尋找您嘗試使用的資源,並檢查資源名稱、資源群組和訂用帳戶。

解決方案2:設定相依性

如果您在部署範本時收到此錯誤,您可能需要新增相依性。 資源管理員會盡可能以平行方式建立資源,以優化部署。

例如,當您部署 Web 應用程式時,App Service 方案必須存在。 如果您尚未指定 Web 應用程式相依於 App Service 方案,Resource Manager 會同時建立這兩個資源。 Web 應用程式因為無法找到正在尋找的 App Service 方案資源而失敗,因為該資源尚不存在。 您可以在 Web 應用程式中設定相依性來防止此錯誤。

使用 隱含相依性 ,而不是 resourceId 函式。 相依性是使用資源的 符號名稱和 標識碼屬性所建立。

例如,Web 應用程式的 serverFarmId 屬性會使用 servicePlan.id 來建立 App Service 方案的相依性。

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  properties: {
    serverFarmId: servicePlan.id
  }
}

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  ...

對大部分的部署而言,不需要使用 dependsOn 來建立 明確的相依性

避免設定不需要的相依性。 不必要的相依性會延長部署的持續時間,因為不會平行部署資源。 此外,您可以建立迴圈相依性來封鎖部署。

部署順序

當您看到相依性問題時,您需要深入了解資源部署的順序。 您可以使用入口網站來檢視部署作業的順序:

  1. 登入入口網站

  2. 從資源群組的 [ 概觀] 中,選取部署歷程記錄的連結。

    Azure 入口網站的螢幕快照,其中醒目提示 [概觀] 區段中資源群組部署歷程記錄的連結。

  3. 針對您想要檢閱的 [部署名稱 ],選取 [相關事件]。

    Azure 入口網站的螢幕快照,其中顯示部署名稱,其中已醒目提示部署歷程記錄中的 [相關事件] 連結。

  4. 檢查每個資源的事件順序。 請注意每個作業的狀態及其時間戳。 例如,下圖顯示三個平行部署的記憶體帳戶。 請注意,這三個記憶體帳戶部署會同時啟動。

    Azure 入口網站活動記錄的螢幕快照,其中顯示三個平行部署的記憶體帳戶及其時間戳和狀態。

    下一個影像顯示三個未平行部署的記憶體帳戶。 第二個記憶體帳戶相依於第一個記憶體帳戶,而第三個記憶體帳戶則相依於第二個記憶體帳戶。 第一個記憶體帳戶會標示為 [已啟動]、[ 已接受] 和 [成功] ,再啟動下一個記憶體帳戶。

    Azure 入口網站活動記錄的螢幕快照,其中顯示以循序順序部署的三個記憶體帳戶,其時間戳和狀態。

解決方案3:取得外部資源

Bicep 會使用符號名稱來建立另一個資源的 隱含相依性現有的關鍵詞會參考已部署的資源。 如果現有的資源位於與您要部署的資源不同的資源群組中,請包含 範圍 並使用 resourceGroup 函式。

在此範例中,會部署 Web 應用程式,以使用來自另一個資源群組的現有 App Service 方案。

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' existing = {
  name: hostingPlanName
  scope: resourceGroup(rgname)
}

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  name: siteName
  properties: {
    serverFarmId: servicePlan.id
  }
}

解決方案 4:從資源取得受管理的識別

如果您要使用 受控識別部署資源,您必須等到該資源部署后,才能擷取受控識別上的值。 針對套用身分識別的資源使用 隱含相依性 。 此方法可確保在 Resource Manager 使用相依性之前,先部署資源和受控識別。

您可以取得應用於虛擬機之受控身份的主體識別碼和租戶識別碼。 例如,如果虛擬機資源具有 的 vm符號名稱,請使用下列語法:

vm.identity.principalId

vm.identity.tenantId

解決方案5:檢查函式

您可以使用資源的符號名稱,從資源取得值。 您可以使用符號名稱,參考相同資源群組或其他資源群組中的記憶體帳戶。 若要從已部署的資源取得值,請使用 現有的 關鍵詞。 如果資源位於不同的資源群組中,請搭配 scope 函式使用。 在大部分情況下,不需要 參考 函式。

下列範例會參考不同資源群組中的現有記憶體帳戶。

resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
  name: stgname
  scope: resourceGroup(rgname)
}

解決方案 6:刪除資源之後

刪除資源後,資源可能會短暫出現在入口網站中但無法使用。 如果您選取資源,您會收到 找不到資源的錯誤。

Azure 入口網站的螢幕快照,其中顯示資源 [概觀] 區段中出現「找不到」錯誤訊息的已刪除資源。

重新整理入口網站,應該從可用資源清單中移除已刪除的資源。 如果已刪除的資源持續顯示為可用超過幾分鐘, 請連絡支持人員