Resolver erros do recurso não encontrado
Este artigo descreve o erro que vê quando não é possível encontrar um recurso durante uma operação. Normalmente, vê este erro ao implementar recursos com um ficheiro Bicep ou um modelo de Resource Manager do Azure (modelo arm). Também verá este erro ao realizar tarefas de gestão e o Azure Resource Manager não consegue encontrar o recurso necessário. Por exemplo, se tentar adicionar etiquetas a um recurso que não existe, receberá este erro.
Sintomas
Existem dois códigos de erro que indicam que não foi possível localizar o recurso. O NotFound
erro devolve um resultado semelhante a:
Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.
O ResourceNotFound
erro devolve um resultado semelhante a:
Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.
Causa
Resource Manager precisa de obter as propriedades de um recurso, mas não consegue encontrar o recurso na sua subscrição.
Solução 1: Verificar as propriedades do recurso
Quando receber este erro ao realizar uma tarefa de gestão, verifique os valores que forneceu para o recurso. Os três valores a verificar são:
- Nome do recurso
- Nome do grupo de recursos
- Subscrição
Se estiver a utilizar o PowerShell ou a CLI do Azure, verifique se está a executar comandos na subscrição que contém o recurso. Pode alterar a subscrição com Set-AzContext ou az account set. Muitos comandos fornecem um parâmetro de subscrição que lhe permite especificar uma subscrição diferente do contexto atual.
Se não conseguir verificar as propriedades, inicie sessão no Microsoft portal do Azure. Localize o recurso que está a tentar utilizar e examine o nome do recurso, o grupo de recursos e a subscrição.
Solução 2: Definir dependências
Se receber este erro ao implementar um modelo, poderá ter de adicionar uma dependência. Resource Manager otimiza as implementações ao criar recursos em paralelo, sempre que possível.
Por exemplo, quando implementa uma aplicação Web, o plano Serviço de Aplicações tem de existir. Se ainda não especificou que a aplicação Web depende do plano de Serviço de Aplicações, Resource Manager cria ambos os recursos ao mesmo tempo. A aplicação Web falha com um erro a indicar que o recurso do plano de Serviço de Aplicações não pode ser encontrado porque ainda não existe. Pode evitar este erro ao definir uma dependência na aplicação Web.
Utilize uma dependência implícita em vez da função resourceId . A dependência é criada com o nome simbólico e a propriedade ID de um recurso.
Por exemplo, a propriedade da serverFarmId
aplicação Web utiliza servicePlan.id
para criar uma dependência no plano de Serviço de Aplicações.
resource webApp 'Microsoft.Web/sites@2022-03-01' = {
properties: {
serverFarmId: servicePlan.id
}
}
resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: hostingPlanName
...
Para a maioria das implementações, não é necessário utilizar dependsOn
para criar uma dependência explícita.
Evite definir dependências que não são necessárias. As dependências desnecessárias prolongam a duração da implementação porque os recursos não são implementados em paralelo. Além disso, pode criar dependências circulares que bloqueiam a implementação.
Ordem de implementação
Quando vir problemas de dependência, tem de obter informações sobre a ordem de implementação de recursos. Pode utilizar o portal para ver a ordem das operações de implementação:
Inicie sessão no portal.
Na Descrição Geral do grupo de recursos, selecione a ligação para o histórico de implementações.
Para o Nome da implementação que pretende rever, selecione Eventos relacionados.
Examine a sequência de eventos para cada recurso. Preste atenção ao estado de cada operação e ao carimbo de data/hora. Por exemplo, a imagem seguinte mostra três contas de armazenamento implementadas em paralelo. Repare que as três implementações da conta de armazenamento foram iniciadas ao mesmo tempo.
A imagem seguinte mostra três contas de armazenamento que não são implementadas em paralelo. A segunda conta de armazenamento depende da primeira conta de armazenamento e a terceira conta de armazenamento depende da segunda conta de armazenamento. A primeira conta de armazenamento é identificada como Iniciada, Aceite e Bem-sucedida antes de a seguinte ser iniciada.
Solução 3: Obter recurso externo
O Bicep utiliza o nome simbólico para criar uma dependência implícita noutro recurso. A palavra-chave existente referencia um recurso implementado. Se um recurso existente estiver num grupo de recursos diferente do recurso que pretende implementar, inclua o âmbito e utilize a função resourceGroup .
Neste exemplo, é implementada uma aplicação Web que utiliza um plano de Serviço de Aplicações existente de outro grupo de recursos.
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
}
}
Solução 4: Obter a identidade gerida do recurso
Se estiver a implementar um recurso com uma identidade gerida, tem de aguardar até que esse recurso seja implementado antes de obter valores na identidade gerida. Utilize uma dependência implícita para o recurso ao qual a identidade é aplicada. Esta abordagem garante que o recurso e a identidade gerida são implementados antes de Resource Manager utiliza a dependência.
Pode obter o ID principal e o ID de inquilino de uma identidade gerida que é aplicada a uma máquina virtual. Por exemplo, se um recurso de máquina virtual tiver um nome simbólico de vm
, utilize a seguinte sintaxe:
vm.identity.principalId
vm.identity.tenantId
Solução 5: Verificar funções
Pode utilizar o nome simbólico de um recurso para obter valores de um recurso. Pode referenciar uma conta de armazenamento no mesmo grupo de recursos ou noutro grupo de recursos com um nome simbólico. Para obter um valor de um recurso implementado, utilize a palavra-chave existente . Se um recurso estiver num grupo de recursos diferente, utilize scope
com a função resourceGroup . Na maioria dos casos, a função de referência não é necessária.
O exemplo seguinte faz referência a uma conta de armazenamento existente num grupo de recursos diferente.
resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
name: stgname
scope: resourceGroup(rgname)
}
Solução 6: Depois de eliminar o recurso
Quando elimina um recurso, pode haver um curto período de tempo quando o recurso aparece no portal, mas não está disponível. Se selecionar o recurso, receberá um erro a indicar que o recurso não foi encontrado.
Atualize o portal e o recurso eliminado deve ser removido da sua lista de recursos disponíveis. Se um recurso eliminado continuar a ser apresentado como disponível durante mais de alguns minutos, contacte o suporte.