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:
Inicie sesión en el portal.
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.
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.
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.