Share via


Resolución de errores para recursos primarios

Este artículo describe el error ParentResourceNotFound que puede producirse al implementar un recurso que depende de un recurso primario. El error se produce al implementar recursos con un archivo de Bicep o una plantilla de Azure Resource Manager (plantilla de ARM).

Síntoma

Al implementar un recurso secundario en otro recurso, es posible que reciba el siguiente error:

Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."

Causa

Cuando un recurso es secundario a otro recurso, el recurso primario debe existir antes de crear el recurso secundario. El nombre del recurso secundario define la conexión con el recurso primario. El nombre del recurso secundario tiene el formato <parent-resource-name>/<child-resource-name>. Por ejemplo, se podría definir una instancia de SQL Database como:

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  name: '${sqlServerName}/${databaseName}'
  ...
}

Para más información sobre los recursos primarios y secundarios de Bicep, consulte Establecimiento del nombre y el tipo de los recursos secundarios en Bicep.

Si implementa el servidor y la base de datos en la misma plantilla, pero no especifica una dependencia en el servidor, es posible que la implementación de la base de datos se inicie antes de que se implemente el servidor. Esto provoca un fallo en la implementación de la base de datos con el error ParentResourceNotFound.

Si el recurso primario ya existe y no se implementa en la misma plantilla, recibirá el error ParentResourceNotFound cuando Resource Manager no pueda asociar el recurso secundario con el primario. Este error puede ocurrir cuando el recurso secundario no está en el formato correcto. También si el recurso secundario se implementa en un grupo de recursos distinto del grupo de recursos para el recurso primario.

Solución 1: implementado en la misma plantilla

Para resolver este error cuando los recursos primarios y secundarios se implementan en la misma plantilla, use una dependencia.

En este ejemplo, se usa un recurso secundario anidado dentro del recurso primario y así se crea la dependencia. El elemento secundario obtiene el tipo de recurso y la versión de la API del recurso primario.

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
  name: sqlServerName
  properties: {
    ...
  }
  resource sqlDatabase 'databases' = {
    name: databaseName
    ...
  }
}

Para más información sobre las dependencias, consulte Declaración de recursos en Bicep.

Solución 2: implementado en diferentes plantillas

Para resolver este error cuando el recurso primario se implementó en una plantilla diferente, no establezca una dependencia. En su lugar, implemente el recurso secundario en el mismo grupo de recursos y proporcione el nombre del recurso primario.

En este ejemplo se usa la palabra clave existente para hacer referencia a un elemento primario que se implementó en un archivo independiente. El recurso secundario usa el elemento parent y el nombre simbólico del recurso primario.

param location string = resourceGroup().location
param sqlServerName string
param databaseName string

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' existing = {
  name: sqlServerName
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  parent: sqlServer
  name: databaseName
  location: location
}