Partilhar via


Resolver erros relacionados ao recurso não encontrado

Este artigo descreve o erro que você vê quando um recurso não pode ser encontrado durante uma operação. Normalmente, você vê esse erro ao implantar recursos com um arquivo Bicep ou modelo do Azure Resource Manager (modelo ARM). Você também vê esse erro ao executar tarefas de gerenciamento 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

Há dois códigos de erro que indicam que o recurso não pode ser encontrado. O NotFound erro retorna um resultado semelhante a:

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

O ResourceNotFound erro retorna um resultado semelhante a:

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

Motivo

O Resource Manager precisa recuperar as propriedades de um recurso, mas não consegue encontrar o recurso em sua assinatura.

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 você estiver usando o PowerShell ou a CLI do Azure, verifique se está executando comandos na assinatura que contém o recurso. Você pode alterar a assinatura usando 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 portal do Microsoft 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 você receber esse erro ao implantar um modelo, talvez seja necessário adicionar uma dependência. O Resource Manager otimiza as implantações criando recursos em paralelo, quando possível.

Por exemplo, quando você implanta um aplicativo Web, o plano do Serviço de Aplicativo deve existir. Se você não especificou que o aplicativo Web depende do plano do Serviço de Aplicativo, o Gerenciador de Recursos criará os dois recursos ao mesmo tempo. O aplicativo Web falha com um erro de que o recurso do plano do Serviço de Aplicativo não pode ser encontrado porque ainda não existe. Você evita esse erro definindo uma dependência no aplicativo Web.

Use uma dependência implícita em vez da função resourceId . A dependência é criada usando o nome simbólico e a propriedade ID de um recurso.

Por exemplo, a propriedade da aplicação web serverFarmId usa servicePlan.id para criar uma dependência no plano do App Service.

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 implantações, 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, você pode criar dependências circulares que bloqueiam a implantação.

Ordem de implantação

Quando você vê problemas de dependência, precisa obter informações sobre a ordem de implantação de recursos. Você pode usar o portal para exibir a ordem das operações de implantação:

  1. Inicie sessão no portal.

  2. Na Visão geral do grupo de recursos, selecione o link para o histórico de implantação.

    Captura de tela do portal do Azure destacando o link para o histórico de implantação de um grupo de recursos na seção Visão geral.

  3. Para o Nome da implantação que você deseja revisar, selecione Eventos relacionados.

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

  4. Examine a sequência de eventos para cada recurso. Preste atenção ao estado de cada operação e ao respetivo carimbo de data/hora. Por exemplo, a imagem a seguir mostra três contas de armazenamento implantadas em paralelo. Observe que as três implantações de conta de armazenamento começaram ao mesmo tempo.

    Captura de tela do log de atividades do portal do Azure exibindo três contas de armazenamento implantadas em paralelo, com seus carimbos de data/hora e status.

    A próxima imagem 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, Aceita e Sucedida antes que a próxima seja iniciada.

    Captura de tela do log de atividades do portal do Azure exibindo três contas de armazenamento implantadas em ordem sequencial, com seus carimbos de data/hora e status.

Solução 3: Obter recursos externos

Bicep usa o nome simbólico para criar uma dependência implícita em outro recurso. A palavra-chave existente faz referência a um recurso implantado. Se um recurso existente estiver em um grupo de recursos diferente do recurso que você deseja implantar, inclua o escopo e use a função resourceGroup .

Neste exemplo, é implantado um aplicativo Web que usa um plano existente do Serviço de Aplicativo 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 identidade gerenciada do recurso

Se você estiver implantando um recurso com uma identidade gerenciada, deverá aguardar até que esse recurso seja implantado antes de recuperar valores na identidade gerenciada. Use uma dependência implícita para o recurso ao qual a identidade é aplicada. Essa abordagem garante que o recurso e a identidade gerenciada sejam implantados antes que o Gerenciador de Recursos use a dependência.

Você pode obter a ID principal e a ID do locatário para uma identidade gerenciada aplicada a uma máquina virtual. Por exemplo, se um recurso de máquina virtual tiver um nome simbólico de vm, use a seguinte sintaxe:

vm.identity.principalId

vm.identity.tenantId

Solução 5: Verificar funções

Você pode usar o nome simbólico de um recurso para obter valores de um recurso. Você pode fazer referência a uma conta de armazenamento no mesmo grupo de recursos ou em outro grupo de recursos usando um nome simbólico. Para obter um valor de um recurso implantado, use a palavra-chave existente . Se um recurso estiver em um grupo de recursos diferente, use scope com a função resourceGroup . Na maioria dos casos, a função de referência não é necessária.

O exemplo a seguir faz referência a uma conta de armazenamento existente em um grupo de recursos diferente.

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

Solução 6: Depois de excluir o recurso

Quando você exclui um recurso, pode haver um curto período de tempo quando o recurso aparece no portal, mas não está disponível. Se você selecionar o recurso, receberá um erro informando que o recurso não foi encontrado.

Captura de ecrã do portal do Azure a mostrar um recurso eliminado com uma mensagem de erro 'Não encontrado' na secção Descrição Geral do recurso.

Atualize o portal e o recurso excluído deve ser removido da sua lista de recursos disponíveis. Se um recurso excluído continuar a ser mostrado como disponível por mais do que alguns minutos, entre em contato com o suporte.