Resolver recursos não encontrados erros

Este artigo descreve o erro que vê quando um recurso não pode ser encontrado durante uma operação. Normalmente, você vê este erro ao implementar recursos com um ficheiro Bicep ou modelo de Gestor de Recursos Azure (modelo ARM). Você também vê este erro ao fazer tarefas de gestão e O Gestor de Recursos Azure não consegue encontrar o recurso necessário. Por exemplo, se tentar adicionar tags a um recurso que não existe, recebe este erro.

Sintoma

Existem dois códigos de erro que indicam que o recurso não pode ser encontrado. 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

O Gestor de Recursos precisa de recuperar as propriedades para um recurso, mas não consegue encontrar o recurso na sua subscrição.

Solução 1 - verifique as propriedades dos recursos

Quando receber este erro durante 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 o Azure CLI, verifique se está a executar comandos na subscrição que contém o recurso. Pode alterar a subscrição com Set-AzContext ou az set. Muitos comandos fornecem um parâmetro de subscrição que permite especificar uma subscrição diferente do contexto atual.

Se não puder verificar as propriedades, inscreva-se no portal Microsoft Azure. Encontre 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 tiver este erro ao implementar um modelo, poderá ter de adicionar uma dependência. O Gestor de Recursos otimiza as implementações criando recursos em paralelo, quando possível.

Por exemplo, quando implementa uma aplicação web, o plano de Serviço de Aplicações deve existir. Se não especificou que a aplicação web depende do plano de Serviço de Aplicações, o Gestor de Recursos cria ambos os recursos ao mesmo tempo. A aplicação web falha com um erro que o recurso do plano de App Service não pode ser encontrado porque ainda não existe. Evita 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 usando o nome simbólico de um recurso e propriedade de ID.

Por exemplo, a propriedade da aplicação web serverFarmId utiliza para criar uma dependência do plano de Serviço de servicePlan.id Aplicações.

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

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

Para a maioria dos destacamentos, não é necessário usar dependsOn para criar uma dependência explícita.

Evite definir dependências que não são necessárias. Dependências desnecessárias prolongam a duração da implantação porque os recursos não são implantados em paralelo. Além disso, pode criar dependências circulares que bloqueiam a implantação.

Ordem de implantação

Quando vê problemas de dependência, precisa de obter informações sobre a ordem de implantação de recursos. Pode utilizar o portal para visualizar a ordem das operações de implantação:

  1. Inscreva-se no portal.

  2. A partir do resumo do grupo de recursos, selecione o link para o histórico de implementação.

    Screenshot que realça a ligação ao histórico de implementação de um grupo de recursos.

  3. Para o nome de Implementação que pretende rever, selecione Eventos Relacionados.

    Screenshot que destaca a ligação com os eventos relacionados com uma implementação.

  4. Examine a sequência de eventos para cada recurso. Preste atenção ao estado de cada operação e é hora marcada. Por exemplo, a imagem a seguir mostra três contas de armazenamento que foram implantadas em paralelo. Note que as três contas de armazenamento são iniciadas ao mesmo tempo.

    Screenshot do registo de atividade para recursos implantados em paralelo.

    A imagem seguinte mostra três contas de armazenamento que não são implantadas 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 é rotulada Como Iniciada, Aceite e Bem sucedida antes do início do próximo.

    Screenshot do registo de atividade para recursos implantados por ordem sequencial.

Solução 3 - obtenha recurso externo

Bicep usa o nome simbólico para criar uma dependência implícita de outro recurso. A palavra-chave existente refere um recurso implantado. Se um recurso existente estiver num grupo de recursos diferente do recurso que pretende implementar, inclua o âmbito e utilize a função Grupo de Recursos.

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@2021-02-01' existing = {
  name: hostingPlanName
  scope: resourceGroup(rgname)
}

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

Solução 4 - obtenha identidade gerida a partir de recursos

Se estiver a implementar um recurso com uma identidade gerida,deve esperar até que esse recurso seja implantado antes de recuperar valores na identidade gerida. Utilize uma dependência implícita para o recurso a que a identidade é aplicada. Esta abordagem garante que o recurso e a identidade gerida são implantados antes que o Gestor de Recursos utilize a dependência.

Você pode obter a identificação principal e inquilino para uma identidade gerida que é aplicada a uma máquina virtual. Por exemplo, se um recurso de máquina virtual tiver um nome simbólico vm de, utilize a seguinte sintaxe:

vm.identity.principalId

vm.identity.tenantId

Solução 5 - verificar funções

Pode usar o nome simbólico de um recurso para obter valores a partir de um recurso. Pode fazer referência a uma conta de armazenamento no mesmo grupo de recursos ou noutro grupo de recursos utilizando um nome simbólico. Para obter um valor de um recurso implantado, utilize a palavra-chave existente. Se um recurso estiver num grupo de recursos diferente, utilize scope com a função Grupo de Recursos. Na maioria dos casos, a função de referência não é necessária.

O exemplo a seguir refere-se a uma conta de armazenamento existente num grupo de recursos diferente.

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

Solução 6 - após a eliminação de recursos

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, obterá um erro no qual o recurso não foi encontrado.

Screenshot de recurso eliminado no portal que mostra recursos não encontrados.

Atualização do portal e o recurso eliminado devem ser removidos da sua lista de recursos disponíveis. Se um recurso eliminado continuar a ser mostrado como disponível por mais de alguns minutos, contacte o suporte.