Résoudre les erreurs liées aux ressources introuvables

Cet article décrit l’erreur que vous rencontrez quand une ressource est introuvable au cours d’une opération. En règle générale, vous voyez cette erreur lors du déploiement de ressources avec un fichier Bicep ou un modèle Azure Resource Manager (modèle ARM). Elle peut aussi survenir quand vous effectuez des tâches de gestion et que Azure Resource Manager ne trouve pas la ressource nécessaire. Par exemple, si vous essayez d’ajouter des étiquettes à une ressource qui n’existe pas, vous obtenez cette erreur.

Symptômes

Deux codes d’erreur indiquent que la ressource est introuvable. L’erreur NotFound retourne un résultat qui se présente comme ceci :

Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.

L’erreur ResourceNotFound retourne un résultat qui se présente comme ceci :

Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.

Cause

Resource Manager a besoin de récupérer les propriétés d’une ressource, mais ne trouve pas la ressource dans votre abonnement.

Solution 1 : Vérifier les propriétés de la ressource

Quand vous obtenez cette erreur pendant que vous effectuez une tâche de gestion, vérifiez les valeurs que vous spécifiez pour la ressource. Les trois valeurs à vérifier sont les suivantes :

  • Nom de la ressource
  • Nom de groupe ressources
  • Abonnement

Si vous utilisez PowerShell ou Azure CLI, vérifiez que vous exécutez bien la commande dans l’abonnement qui contient la ressource. Vous pouvez changer d’abonnement avec Set-AzContext ou az account set. De nombreuses commandes proposent un paramètre d’abonnement qui vous permet de spécifier un abonnement différent du contexte actuel.

Si vous ne pouvez pas vérifier les propriétés, connectez-vous au Portail Microsoft Azure. Recherchez la ressource que vous essayez d’utiliser et examinez le nom de la ressource, le groupe de la ressource et l’abonnement.

Solution 2 : Définir des dépendances

Si vous obtenez cette erreur pendant le déploiement d’un modèle, il peut être nécessaire d’ajouter une dépendance. Resource Manager optimise les déploiements en créant des ressources en parallèle, quand cela est possible.

Par exemple, quand vous déployez une application web, le plan App Service doit être présent. Si vous n’avez pas spécifié que l’application web est dépendante du plan App Service, Resource Manager crée les deux ressources en même temps. L’application web échoue avec une erreur qui signifie que la ressource du plan App Service est introuvée, car elle n’existe pas encore. Vous pouvez éviter cette erreur en définissant une dépendance dans l’application web.

Utilisez une dépendance implicite plutôt que la fonction resourceId. La dépendance est créée à l’aide du nom symbolique et de la propriété d’ID d’une ressource .

Par exemple, la propriété de l’application web serverFarmId utilise servicePlan.id pour créer une dépendance sur le plan App Service.

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  properties: {
    serverFarmId: servicePlan.id
  }
}

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  ...

Pour la plupart des déploiements, il n’est pas nécessaire d’utiliser dependsOn pour créer une dépendance explicite.

Évitez de définir des dépendances qui ne sont pas nécessaires. Les dépendances inutiles allongent la durée du déploiement, car les ressources ne sont pas déployées en parallèle. Par ailleurs, il se peut que créiez des dépendances circulaires qui bloquent le déploiement.

Ordre de déploiement

Si vous observez des problèmes de dépendance, vous devez déterminer l’ordre de déploiement des ressources. Vous pouvez utiliser le portail pour afficher l’ordre des opérations de déploiement :

  1. Connectez-vous au portail.

  2. Dans la vue d’ensemble du groupe de ressources, sélectionnez le lien pour l’historique du déploiement.

    Capture d'écran du portail Azure mettant en évidence le lien vers l'historique de déploiement d'un groupe de ressources dans la section Vue d'ensemble.

  3. Pour le nom du déploiement à passer en revue, sélectionnez Événements connexes.

    Capture d'écran du portail Azure montrant un nom de déploiement avec le lien Événements connexes en surbrillance dans l'historique du déploiement.

  4. Examinez la séquence d’événements de chaque ressource. Faites attention à l’état de chaque opération et à l’horodaage. Par exemple, l’image suivante montre trois comptes de stockage déployés en parallèle. Remarquez que les trois déploiements de compte de stockage ont démarré en même temps.

    Capture d'écran du journal d'activité du portail Azure affichant trois comptes de stockage déployés en parallèle, avec leurs horodatages et leurs statuts.

    L’image suivante montre trois comptes de stockage non déployés en parallèle. Le deuxième compte de stockage dépend du premier compte de stockage, et le troisième du deuxième. Le premier compte de stockage est étiqueté Démarré, Accepté et Réussi avant le début du suivant.

    Capture d'écran du journal d'activité du portail Azure affichant trois comptes de stockage déployés dans l'ordre séquentiel, avec leurs horodatages et leurs statuts.

Solution 3 : Obtenir une ressource externe

Bicep utilise le nom symbolique pour créer une dépendance implicite sur une autre ressource. Le mot clé existant fait référence à une ressource déployée. Si une ressource existante se trouve dans un groupe de ressources différent de celui de la ressource que vous voulez déployer, incluez l’étendue et utilisez la fonction resourceGroup.

Dans cet exemple, une application web est déployée et utilise un plan App Service existant d’un autre groupe de ressources.

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
  }
}

Solution 4 : Obtenir une identité managée à partir d'une ressource

Si vous déployez une ressource qui crée une identité managée, vous devez attendre que cette ressource soit déployée avant de récupérer des valeurs sur l'identité managée. Utilisez une dépendance implicite pour la ressource à laquelle l’identité est appliquée. Cette approche garantit que la ressource et l'identité gérée seront déployées avant que Resource Manager n’utilise la dépendance.

Vous pouvez obtenir l’ID du principal et l’ID de locataire pour une identité gérée appliquée à une machine virtuelle. Par exemple, si une ressource de machine virtuelle a un nom symbolique vm, utilisez la syntaxe suivante :

vm.identity.principalId

vm.identity.tenantId

Solution 5 : Vérifier les fonctions

Vous pouvez utiliser le nom symbolique d’une ressource pour obtenir des valeurs d’une ressource. Vous pouvez référencer un compte de stockage dans le même groupe de ressources ou un autre groupe de ressources en utilisant un nom symbolique. Pour obtenir une valeur d’une ressource déployée, utilisez le mot clé existant. Si une ressource se trouve dans un autre groupe de ressources, utilisez scope avec la fonction resourceGroup. Dans la plupart des cas, la fonction reference n’est pas nécessaire.

L’exemple suivant référence un compte de stockage existant dans un autre groupe de ressources.

resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
  name: stgname
  scope: resourceGroup(rgname)
}

Solution 6 : Après la suppression de la ressource

Lorsque vous supprimez une ressource, la durée d’apparition de la ressource dans le portail peut être courte, mais elle n’est pas disponible. Si vous sélectionnez la ressource, vous verrez un message d’erreur indiquant que la ressource est introuvable.

Capture d'écran du portail Azure montrant une ressource supprimée avec un message d'erreur « Not found » dans la section Vue d’ensemble de la ressource.

Actualisez le portail et la ressource supprimée doit être supprimée de votre liste de ressources disponibles. Si une ressource supprimée continue d’être affichée comme disponible pendant plus de quelques minutes, contactez le support.