Ř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:
Přihlaste se k portálu.
V přehledu skupiny prostředků vyberte odkaz na historii nasazení.
U názvu nasazení , který chcete zkontrolovat, vyberte Související události.
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ě.
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é .
Ř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.
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.