Resolución de errores de recurso no encontrado

En este artículo se describen los errores que pueden aparecer cuando no se encuentra un recurso durante la implementación. Normalmente, verá este error al implementar recursos con un archivo Bicep o una plantilla de Azure Resource Manager (plantilla de ARM). También puede ver este error cuando realice tareas de administración y Azure Resource Manager no encuentre el recurso necesario. Por ejemplo, si intenta agregar etiquetas a un recurso que no existe, recibirá este error.

Síntomas

Hay dos códigos de error que indican que no se puede encontrar el recurso. El error NotFound devuelve un resultado similar al siguiente:

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

El error ResourceNotFound devuelve un resultado similar al siguiente:

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

Causa

Resource Manager necesita recuperar las propiedades de un recurso, pero no puede encontrar el recurso en la suscripción.

Solución 1: comprobación de las propiedades del recurso

Cuando reciba este error mientras hace una tarea de administración, compruebe los valores que ha proporcionado para el recurso. Los tres valores que se deben comprobar son:

  • Nombre del recurso
  • Definición de un nombre de grupo de recursos
  • Suscripción

Si usa PowerShell o la CLI de Azure, compruebe que esté ejecutando los comandos en la suscripción que contiene el recurso. Puede cambiar la suscripción con Set-AzContext o az account set. Muchos comandos proporcionan un parámetro de suscripción que le permite especificar una suscripción diferente al contexto actual.

Si no puede comprobar las propiedades, inicie sesión en Microsoft Azure Portal. Busque el recurso que intenta usar y examine el nombre del recurso, el grupo de recursos y la suscripción.

Solución 2: establecimiento de dependencias

Si recibe este error al implementar una plantilla, es posible que tenga que agregar una dependencia. Resource Manager optimiza las implementaciones creando recursos en paralelo cuando es posible.

Por ejemplo, al implementar una aplicación web, deberá existir el plan de App Service. Si no ha especificado que la aplicación web dependa del plan de App Service, Resource Manager crea ambos recursos al mismo tiempo. Se produce un error en la aplicación web en el que se indica que no se puede encontrar el recurso del plan de App Service porque aún no existe. Puede evitar este error estableciendo una dependencia en la aplicación web.

Use una dependencia implícita en lugar de la función resourceId. La dependencia se crea con el nombre simbólico y la propiedad ID de un recurso.

Por ejemplo, la propiedad serverFarmId de la aplicación web usa servicePlan.id para crear una dependencia en el plan de 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 la mayoría de las implementaciones, no es necesario usar dependsOn para crear una dependencia explícita.

Evite establecer dependencias que no sean necesarias. Las dependencias innecesarias prolongan la duración de la implementación porque los recursos no se implementan en paralelo. Además, puede crear dependencias circulares que bloqueen la implementación.

Orden de implementación

Cuando se encuentre con problemas de dependencia, debe comprender mejor el orden de la implementación de recursos. Puede usar el portal para ver el orden de las operaciones de implementación:

  1. Inicie sesión en el portal.

  2. En Información general del grupo de recursos, seleccione el vínculo para el historial de implementación.

    Captura de pantalla de Azure Portal que resalta el vínculo al historial de implementación del grupo de recursos en la sección Información general.

  3. Para el nombre de implementación que quiera revisar, seleccione Eventos relacionados.

    Captura de pantalla de Azure Portal que muestra un nombre de implementación con el vínculo de Eventos relacionados realtado en el historial de implementación.

  4. Examine la secuencia de eventos para cada recurso. Preste atención al estado de cada operación y su marca de tiempo. Por ejemplo, la siguiente imagen muestra tres cuentas de almacenamiento que se implementan en paralelo. Tenga en cuenta que las tres implementaciones de cuenta de almacenamiento se inician al mismo tiempo.

    Captura de pantalla del registro de actividad de Azure Portal que muestra tres cuentas de almacenamiento implementadas en paralelo con sus marcas de tiempo y estados.

    La siguiente imagen muestra tres cuentas de almacenamiento que no se implementan en paralelo. La segunda cuenta de almacenamiento depende de la primera cuenta de almacenamiento y la tercera cuenta de almacenamiento depende de la segunda cuenta de almacenamiento. La primera cuenta de almacenamiento se etiqueta como Iniciada, Aceptada y Correcta antes de que se inicie la siguiente.

    Captura de pantalla del registro de actividad de Azure Portal que muestra tres cuentas de almacenamiento implementadas en orden secuencial con sus marcas de tiempo y estados.

Solución 3: obtención de recursos externos

Bicep usa el nombre simbólico para crear una dependencia implícita en otro recurso. La palabra clave existente hace referencia a un recurso implementado. Si un recurso existente se encuentra en un grupo de recursos diferente del recurso que quiere implementar, incluya el ámbito y use la función resourceGroup.

En este ejemplo, se implementa una aplicación web que usa un plan de App Service existente de otro 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
  }
}

Solución 4: obtención de una identidad administrada del recurso

Si va a implementar un recurso con una identidad administrada, deberá esperar a que ese recurso se implemente para poder recuperar los valores de la identidad administrada. Use una dependencia implícita para el recurso al que se aplica la identidad. Este enfoque garantiza que el recurso y la identidad administrada se implementen antes de que Resource Manager use la dependencia.

Puede obtener el id. principal y el id. de inquilino de una identidad administrada que se aplica a una máquina virtual. Por ejemplo, si un recurso de máquina virtual tiene un nombre simbólico de vm, use la sintaxis siguiente:

vm.identity.principalId

vm.identity.tenantId

Solución 5: comprobación de las funciones

Puede usar el nombre simbólico de un recurso para obtener valores de un recurso. Puede hacer referencia a una cuenta de almacenamiento en el mismo grupo de recursos u otro grupo de recursos con un nombre simbólico. Para obtener un valor de un recurso implementado, use la palabra clave existente. Si el recurso está en otro grupo de recursos, use scope con la función resourceGroup. En la mayoría de los casos, la función reference no es necesaria.

En el siguiente ejemplo se hace referencia a una cuenta de almacenamiento existente en otro grupo de recursos.

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

Solución 6: después de eliminar el recurso

Al eliminar un recurso, es posible que haya un período corto de tiempo en el que el recurso aparezca en el portal, pero no esté disponible. Si selecciona el recurso, recibirá un error en el que se indicará que no se encuentra el recurso.

Captura de pantalla de Azure Portal que muestra un recurso eliminado con un mensaje de error

Actualice el portal; el recurso eliminado debe quitarse de la lista de recursos disponibles. Si un recurso eliminado sigue mostrándose como disponible durante más de unos minutos, póngase en contacto con el soporte técnico.