Řešení chyb kvůli nenalezení prostředku

Tento článek popisuje chybu, která se zobrazí, když během operace nejde najít prostředek. Tato chyba se obvykle zobrazuje při nasazování prostředků pomocí souboru Bicep nebo šablony Azure Resource Manager (šablony ARM). Tato chyba se také zobrazí při provádění úloh správy a Azure Resource Manager nemůže najít požadovaný prostředek. Pokud se například pokusíte přidat značky k prostředku, který neexistuje, zobrazí se tato chyba.

Příznaky

Existují dva kódy chyb, které značí, že prostředek nejde najít. Chyba NotFound vrátí výsledek podobný následujícímu:

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

Chyba ResourceNotFound vrátí výsledek podobný následujícímu:

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

Příčina

Resource Manager potřebuje načíst vlastnosti prostředku, ale nemůže najít prostředek ve vašem předplatném.

Řešení 1: Kontrola vlastností prostředku

Pokud se při provádění úloh správy zobrazí tato chyba, zkontrolujte hodnoty, které jste pro prostředek zadali. Měli byste zkontrolovat tyto 3 hodnoty:

  • Název prostředku
  • Název skupiny prostředků
  • Předplatné

Pokud používáte PowerShell nebo Azure CLI, zkontrolujte, že spouštíte příkazy v předplatném, které obsahuje daný prostředek. Předplatné můžete změnit pomocí rutiny Set-AzContext nebo az account set. Řada příkazů nabízí parametr předplatného, který umožňuje zadat jiné předplatné, než je aktuální kontext.

Pokud vlastnosti nemůžete ověřit, přihlaste se k Azure Portal Microsoft. Vyhledejte prostředek, který se pokoušíte použít, a prozkoumejte název prostředku, skupinu prostředků a předplatné.

Řešení 2: Nastavení závislostí

Pokud se při nasazování šablony zobrazí tato chyba, možná budete muset přidat závislost. Resource Manager optimalizuje nasazení paralelním vytvářením prostředků, pokud je to možné.

Když například nasadíte webovou aplikaci, musí existovat plán App Service. Pokud jste neurčili, že webová aplikace závisí na plánu App Service, Resource Manager vytvoří oba prostředky současně. Webová aplikace selže s chybou, že prostředek App Service plánu nejde najít, protože ještě neexistuje. Této chybě zabráníte nastavením závislosti ve webové aplikaci.

Místo funkce resourceId použijte implicitní závislost. Závislost se vytvoří pomocí symbolického názvu a vlastnosti ID prostředku.

Například vlastnost webové aplikace serverFarmId používá servicePlan.id k vytvoření závislosti na plánu App Service.

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

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

U většiny nasazení není nutné k vytvoření explicitní závislosti použít .dependsOn

Vyhněte se nastavování závislostí, které nejsou potřeba. Nepotřebné závislosti prodlužují dobu trvání nasazení, protože prostředky se nenasazují paralelně. Můžete také vytvořit cyklické závislosti, které blokují nasazení.

Pořadí nasazení

Když se zobrazí problémy se závislostmi, potřebujete získat přehled o pořadí nasazení prostředků. K zobrazení pořadí operací nasazení můžete použít portál:

  1. Přihlaste se k portálu.

  2. V přehledu skupiny prostředků vyberte odkaz na historii nasazení.

    Snímek obrazovky s Azure Portal zvýrazněným odkazem na historii nasazení skupiny prostředků v části Přehled

  3. U názvu nasazení , který chcete zkontrolovat, vyberte Související události.

    Snímek obrazovky s Azure Portal s názvem nasazení a zvýrazněným odkazem Související události v historii nasazení

  4. Prozkoumejte posloupnost událostí pro jednotlivé prostředky. Věnujte pozornost stavu každé operace a jejímu časovému razítku. Například na následujícím obrázku jsou tři paralelně nasazené účty úložiště. Všimněte si, že se ve stejnou dobu spustila tři nasazení účtu úložiště.

    Snímek obrazovky Azure Portal protokolu aktivit zobrazující tři paralelně nasazené účty úložiště s časovými razítky a stavy

    Další obrázek ukazuje tři účty úložiště, které nejsou nasazené paralelně. Druhý účet úložiště závisí na prvním účtu úložiště a třetí účet úložiště závisí na druhém účtu úložiště. První účet úložiště má před spuštěním dalšího účtu označení Spuštěno, Přijato a Úspěšné .

    Snímek obrazovky s protokolem aktivit Azure Portal zobrazující tři účty úložiště nasazené v postupném pořadí s časovými razítky a stavy

Řešení 3: Získání externího prostředku

Bicep používá symbolický název k vytvoření implicitní závislosti na jiném prostředku. Existující klíčové slovo odkazuje na nasazený prostředek. Pokud je existující prostředek v jiné skupině prostředků než prostředek, který chcete nasadit, zahrňte obor a použijte funkci resourceGroup .

V tomto příkladu se nasadí webová aplikace, která používá existující plán App Service z jiné skupiny prostředků.

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
  }
}

Řešení 4: Získání spravované identity z prostředku

Pokud nasazujete prostředek se spravovanou identitou, musíte před načtením hodnot pro spravovanou identitu počkat, až se tento prostředek nasadí. Pro prostředek, na který se identita použije, použijte implicitní závislost . Tento přístup zajistí, že prostředek a spravovaná identita se nasadí dřív, než Resource Manager závislost použije.

Můžete získat ID objektu zabezpečení a ID tenanta pro spravovanou identitu, která se použije na virtuální počítač. Pokud má například prostředek virtuálního počítače symbolický název vm, použijte následující syntaxi:

vm.identity.principalId

vm.identity.tenantId

Řešení 5: Kontrola funkcí

K získání hodnot z prostředku můžete použít symbolický název prostředku. Na účet úložiště ve stejné nebo jiné skupině prostředků můžete odkazovat pomocí symbolického názvu. Pokud chcete získat hodnotu z nasazeného prostředku, použijte existující klíčové slovo. Pokud je prostředek v jiné skupině prostředků, použijte scope funkci resourceGroup . Ve většině případů není referenční funkce potřeba.

Následující příklad odkazuje na existující účet úložiště v jiné skupině prostředků.

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

Řešení 6: Po odstranění prostředku

Když prostředek odstraníte, může se na portálu zobrazit krátce, ale není dostupný. Pokud vyberete prostředek, zobrazí se chyba, že prostředek není nalezen.

Snímek obrazovky Azure Portal zobrazující odstraněný prostředek s chybovou zprávou Nenalezena v části Přehled prostředku

Aktualizujte portál a odstraněný prostředek by se měl odebrat ze seznamu dostupných prostředků. Pokud se odstraněný prostředek zobrazuje jako dostupný déle než několik minut, kontaktujte podporu.