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:
Output
Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.
El error ResourceNotFound devuelve un resultado similar al siguiente:
Output
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.
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.
Si un recurso se debe implementar después de otro, use el elemento dependsOn de la plantilla.
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.
Las funciones reference y list* crean una dependencia implícita del recurso al que se hace referencia cuando este se implementa en la misma plantilla y se hace referencia a él por su nombre, no por el id. de recurso. Por lo tanto, puede tener más dependencias que las especificadas en la propiedad dependsOn.
La función resourceId no crea una dependencia implícita ni valida que el recurso existe. Las funciones reference y list* no crean una dependencia implícita cuando el recurso se conoce por su identificador de recurso. Para crear una dependencia implícita, pase el nombre del recurso que se implementa en la misma plantilla.
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:
En Información general del grupo de recursos, seleccione el vínculo para el historial de implementación.
Para el nombre de implementación que quiera revisar, seleccione Eventos relacionados.
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.
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.
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.
Si necesita obtener un recurso que existe en otro grupo de recursos u otra suscripción al implementar una plantilla, utilice la función resourceId. Esta función devuelve el nombre completo del recurso.
Los parámetros del grupo de recursos y la suscripción de la función resourceId son opcionales. Si no los proporciona, el valor predeterminado será la suscripción y el grupo de recursos actuales. Cuando trabaje con un recurso de otro grupo de recursos o suscripción, asegúrese de que proporciona dichos valores.
En el ejemplo siguiente se obtiene el identificador de recurso de un recurso que existe en otro grupo de recursos.
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:
Bicep
vm.identity.principalIdvm.identity.tenantId
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. Si pasa el nombre de la identidad administrada a la función reference, Resource Manager intenta resolver la referencia antes de implementar el recurso y la identidad. En su lugar, pase el nombre del recurso al que se aplica la identidad. Este enfoque garantiza que el recurso y la identidad administrada se implementan antes de que Resource Manager resuelva la función reference.
En la función reference, use Full para obtener todas las propiedades, incluida la identidad administrada.
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.
Al implementar una plantilla, busque expresiones que usen las funciones reference o listKeys. Los valores que proporcione varían en función de si el recurso se está en la misma plantilla, grupo de recursos y suscripción. Compruebe que proporciona los valores de parámetro necesarios para su escenario. Si el recurso está en otro grupo de recursos, proporcione el identificador de recurso completo. Por ejemplo, para hacer referencia a una cuenta de almacenamiento en otro grupo de recursos, use:
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.
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.
Obtenga información sobre cómo implementar recursos secundarios y de extensión, y hacer referencia a los recursos existentes, dentro del código de Bicep.
Obtenga información sobre los inquilinos, los usuarios y las suscripciones de Azure. Use la CLI de Azure para administrar las suscripciones, crear grupos de administración y bloquear suscripciones.
Solución de errores comunes de implementación de Azure para recursos que se implementan con archivos Bicep o plantillas de Azure Resource Manager (plantillas ARM).
Comprenda qué proveedores de recursos admiten Azure Resource Manager y sus esquemas, versiones de API disponibles y las regiones que pueden hospedar los recursos.
Describe cómo resolver errores al implementar un recurso que depende de un recurso primario en un archivo Bicep o en una plantilla de Azure Resource Manager (plantilla de ARM).