Déclaration de ressource dans des modèles ARM

Pour déployer une ressource via un modèle Azure Resource Manager (modèle ARM), vous ajoutez une déclaration de ressource. Utilisez le tableau resources dans un modèle JSON.

languageVersion 2.0 apporte une liste d'améliorations aux modèles ARM JSON, notamment en remplaçant la déclaration des ressources par un objet au lieu d'un tableau. La plupart des échantillons présentés dans cet article font toujours référence à un tableau resources. Pour des informations spécifiques à languageVersion 2.0, consultez Utiliser un nom symbolique.

Remarque

La version actuelle de l’extension Azure Resource Manager Tools pour Visual Studio Code ne reconnaît pas les améliorations apportées à languageVersion 2.0.

Conseil

Nous recommandons Bicep parce qu’il offre les mêmes fonctionnalités que les modèles ARM et que la syntaxe est plus facile d’utilisation. Pour plus d’informations, consultez la déclaration ressources.

Vous êtes limité à 800 ressources dans un modèle. Pour plus d’informations, consultez Limites du modèle.

Définir le type et la version d’une ressource

Lorsque vous ajoutez une ressource à votre modèle, commencez par définir le type de la ressource et la version de l’API. Ces valeurs déterminent les autres propriétés disponibles pour la ressource.

L’exemple suivant montre comment définir le type de ressource et la version de l’API pour un compte de stockage. L’exemple n’affiche pas la déclaration de ressource complète.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

Définit un nom de ressource

Chaque ressource a un nom. Lorsque vous définissez le nom de la ressource, soyez attentif aux règles et restrictions applicables aux noms de ressources.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Définissez un emplacement

De nombreuses ressources nécessitent un emplacement. Vous pouvez déterminer si la ressource a besoin d’un emplacement via IntelliSense ou une référence de modèle. L’exemple suivant ajoute un paramètre d’emplacement utilisé pour le compte de stockage.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

Pour plus d’informations, consultez Définir l’emplacement des ressources dans un modèle Resource Manager.

Définir des étiquettes

Vous pouvez appliquer des étiquettes à une ressource pendant le déploiement. Les étiquettes vous aident à organiser logiquement vos ressources déployées. Pour obtenir des exemples de différentes façons de spécifier les étiquettes, consultez Étiquettes de modèle ARM.

Définir des propriétés spécifiques d’une ressource

Les propriétés précédentes sont génériques pour la plupart des types de ressources. Après avoir défini ces valeurs, vous devez définir les propriétés qui sont spécifiques du type de ressource que vous déployez.

Utilisez IntelliSense ou une référence de modèle pour déterminer les propriétés disponibles et celles qui sont requises. L’exemple suivant définit les propriétés restantes pour un compte de stockage.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Utiliser un nom symbolique

Dans Bicep, chaque définition de ressource a un nom symbolique. Le nom symbolique sert à référencer la ressource dans d'autres parties de votre fichier Bicep. Pour prendre en charge le nom symbolique dans les modèles ARM JSON, ajoutez languageVersion avec la version 2.0, et changez la définition de ressource du tableau vers l'objet. Lorsque languageVersion est spécifié pour un modèle, un nom symbolique doit être spécifié pour les ressources de niveau racine. Par exemple :

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

Le fichier JSON précédent peut être écrit dans celui qui suit :

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

Les noms symboliques respectent la casse. Les caractères autorisés pour les noms symboliques sont les lettres, les chiffres et le trait de soulignement (_). Les noms symboliques doivent être uniques dans un modèle. Cependant, ils peuvent se chevaucher avec les noms de variables, de paramètres et de sorties d'un modèle. Dans l'exemple suivant, le nom symbolique de la ressource de compte de stockage porte le même nom que la sortie.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

La fonction de référence peut utiliser le nom symbolique d'une ressource, comme indiqué dans l'exemple précédent. La fonction de référence ne peut plus utiliser le nom d'une ressource. Par exemple, reference(parameters('storageAccountName')) n'est pas autorisé.

Si la ressource Déploiements est utilisée dans le déploiement d'un nom symbolique, utilisez l'apiVersion 2020-09-01 ou une version ultérieure.

Déclarer des ressources existantes

En utilisant languageVersion 2.0 et un nom symbolique pour la déclaration des ressources, vous pouvez déclarer des ressources existantes. Une propriété de ressource de niveau supérieur de "existing": true amène ARM à lire plutôt qu'à déployer une ressource, comme illustré dans l'exemple suivant :

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

Les ressources existantes n'ont pas besoin de définir des propriétés autres que type, apiVersion et name.

Étapes suivantes