Partager via


Déclaration de ressource dans les 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 resources tableau dans un modèle JSON.

languageVersion 2.0 répertorie les améliorations apportées aux modèles JSON ARM, telles que la modification de la déclaration de ressources d’un tableau en objet. La plupart des exemples présentés dans cet article utilisent toujours le tableau resources. Pour plus d’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 / Astuce

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 en savoir plus, consultez la déclaration de ressource.

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

Définir le type de ressource et la version

Lorsque vous ajoutez une ressource à votre modèle, commencez par définir le type de 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éfinir le nom de la 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éfinir l’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 aux ressources

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 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 est utilisé pour référencer la ressource à partir des 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.0et remplacez la définition de ressource d’un tableau par un 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 code JSON précédent peut être écrit dans le code JSON suivant :

{
  "$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 des lettres, des chiffres et _. Les noms symboliques doivent être uniques dans un modèle, mais peuvent chevaucher des noms de variables, des noms de paramètres et des noms de sortie dans 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 illustré 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ée.

Si la ressource Deployments est utilisée dans un déploiement de nom symbolique, utilisez apiVersion 2020-09-01 ou version ultérieure.

Déclarer des ressources existantes

Avec languageVersion 2.0 et en utilisant un nom symbolique pour la déclaration de ressource, 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, apiVersionet name.

Étapes suivantes