Partager via


Résoudre les erreurs avec des ressources parentes

Cet article décrit l’erreur ParentResourceNotFound que vous pouvez obtenir lors du déploiement d’une ressource dépendante d’une ressource parente. L’erreur se produit lorsque vous déployez des ressources avec un fichier Bicep ou un modèle Azure Resource Manager (modèle ARM).

Symptôme

Lorsque vous déployez une ressource enfant vers une autre ressource, vous pouvez recevoir l’erreur suivante :

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

La cause

Lorsqu’une ressource est enfant d’une autre ressource, la ressource parente doit exister avant que la ressource enfant soit créée. Le nom de la ressource enfant définit la connexion avec la ressource parente. Le nom de la ressource enfant est au format <parent-resource-name>/<child-resource-name>. Par exemple, une base de données SQL peut être définie comme suit :

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

Pour plus d’informations sur les ressources enfants et parents Bicep, consultez Définir le nom et le type des ressources enfants dans Bicep.

Si vous déployez le serveur et la base de données dans le même modèle, mais que vous ne spécifiez pas de dépendance sur le serveur, le déploiement de la base de données peut commencer avant le déploiement du serveur. Cela provoque l’échec du déploiement de la base de données avec l’erreur ParentResourceNotFound .

Si la ressource parente existe déjà et n’est pas déployée dans le même modèle, vous obtenez l’erreur ParentResourceNotFound lorsque Resource Manager ne peut pas associer la ressource enfant à un parent. Cette erreur peut se produire lorsque la ressource enfant n’est pas au format correct. Ou si la ressource enfant est déployée sur un groupe de ressources différent du groupe de ressources pour la ressource parente.

Solution 1 : Déployée dans le même modèle

Pour résoudre cette erreur lorsque les ressources parent et enfant sont déployées dans le même modèle, utilisez une dépendance.

Cet exemple utilise une ressource enfant imbriquée dans la ressource parente et crée la dépendance. L’enfant obtient le type de ressource et la version de l’API à partir de la ressource parente.

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

Pour plus d’informations sur les dépendances, consultez La déclaration de ressource dans Bicep.

Solution 2 : Déployée dans différents modèles

Pour résoudre cette erreur lorsque la ressource parente a été déployée dans un autre modèle, ne définissez pas de dépendance. Au lieu de cela, déployez l’enfant dans le même groupe de ressources et fournissez le nom de la ressource parente.

Cet exemple utilise le mot clé existant pour référencer un parent déployé dans un fichier distinct. La ressource enfant utilise l’élément parent et le nom symbolique de la ressource parente.

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
}