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:

  1. Inicie sessão no portal.

  2. Na Descrição Geral do grupo de recursos, selecione a ligação para o histórico de implementações.

    Captura de ecrã a mostrar portal do Azure a realçar a ligação para o histórico de implementações de um grupo de recursos na secção Descrição geral.

  3. Para o Nome da implementação que pretende rever, selecione Eventos relacionados.

    Captura de ecrã a mostrar portal do Azure a mostrar um nome de implementação com a ligação Eventos relacionados realçada no histórico de implementações.

  4. 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.

    Captura de ecrã a mostrar portal do Azure registo de atividades a apresentar três contas de armazenamento implementadas em paralelo, com os respetivos carimbos de data/hora e estados.

    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.

    Captura de ecrã a mostrar portal do Azure registo de atividades a apresentar três contas de armazenamento implementadas por ordem sequencial, com os respetivos carimbos de data/hora e estados.

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.

Captura de ecrã a mostrar portal do Azure a mostrar um recurso eliminado com uma mensagem de erro

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.