Compartilhar via


Resolver erros para 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 ARM (modelo do Azure Resource Manager). 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 você tentar adicionar tags a um recurso que não existe, receberá esse 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 você receber esse erro durante uma tarefa de gerenciamento, verifique os valores fornecidos para o recurso. Os três valores a serem verificados 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 com Set-AzContext ou az account set. Muitos comandos fornecem um parâmetro de assinatura que permite especificar uma assinatura diferente do contexto atual.

Se você não puder verificar as propriedades, entre no portal do Microsoft Azure. Localize o recurso que você está tentando usar e examine o nome do recurso, o grupo de recursos e a assinatura.

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 tiver especificado que o aplicativo Web depende do plano do Serviço de Aplicativo, o Resource Manager 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 ele 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 do serverFarmId aplicativo Web é usada servicePlan.id para criar uma dependência no plano do Serviço de Aplicativo.

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 do recurso. Você pode usar o portal para exibir a ordem das operações de implantação:

  1. Entre 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 tela do portal do Azure mostrando um nome de implantação com o link Eventos relacionados realçado no histórico de implantação.

  4. Examine a sequência de eventos para cada recurso. Preste atenção ao status de cada operação e seu 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 foram iniciadas 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 imagem a seguir 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 Bem-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

O 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 do Serviço de Aplicativo 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 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 Resource Manager use a dependência.

Você pode obter a ID da entidade de segurança 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: verifique as 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 . Para a 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: após excluir o recurso

Quando você exclui um recurso, pode haver um curto período de tempo em que 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 tela do portal do Azure mostrando um recurso excluído com uma mensagem de erro

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