Résoudre les erreurs avec des ressources parentes

Cet article décrit les erreurs ParentResourceNotFound que vous pouvez rencontrer au cours du déploiement d’une ressource dépendant d’une ressource parente. L’erreur se produit quand vous déployez des ressources avec un fichier Bicep ou un modèle Azure Resource Manager (modèle ARM).

Symptôme

Au cours du déploiement d’une ressource qui est l’enfant d’une autre ressource, vous pouvez rencontrer l’erreur suivante :

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

Cause

Lorsqu’une ressource est l’enfant d’une autre ressource, la ressource parente doit exister avant de pouvoir créer la ressource enfant. Le nom de la ressource enfant définit la connexion à la ressource parente. Le nom de la ressource enfant est au format suivant : <parent-resource-name>/<child-resource-name>. Par exemple, une base de données SQL peut être définie de la manière suivante :

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 que le serveur n’ait été déployé. L’erreur provoque l’échec du déploiement de la base de données 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 quand Resource Manager ne peut pas associer la ressource enfant à un parent. Cette erreur peut se produire lorsque la ressource enfant n’a pas le format correct. Ou, si la ressource enfant est déployée dans un groupe de ressources différent de celui de la ressource parente.

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

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

Cet exemple utilise une ressource enfant imbriquée au sein de la ressource parente et qui crée la dépendance. L’enfant obtient le type de ressource et la version de l’API 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 Déclaration de ressource dans Bicep.

Solution 2 : Déploiement dans différents modèles

Pour résoudre cette erreur quand 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 faire référence à un parent déployé dans un fichier distinct. La ressource enfant utilise l’élément parent et le nom symbolique de la ressource parent.

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
}