Tutoriel : Créer une spec de modèle avec des modèles liés

Découvrez comment créer une spec de modèle avec un modèle principal et un modèle lié. Les specs de modèle permettent de partager des modèles ARM avec d’autres utilisateurs de votre organisation. Cet article explique comment créer une spec de modèle pour empaqueter un modèle principal et ses modèles liés à l’aide de la nouvelle propriété relativePath de la ressources de déploiement.

Prérequis

Compte Azure avec un abonnement actif. Créez un compte gratuitement.

Notes

Pour utiliser des specs de modèle avec Azure PowerShell, vous devez installer la version 5.0.0 ou ultérieure. Pour l’utiliser avec l’interface de ligne de commande Azure CLI, utilisez la version 2.14.2 ou ultérieure.

Créer des modèles liés

Créez le modèle principal et le modèle lié.

Pour lier un modèle, ajoutez une ressource de déploiement à votre modèle principal. Dans la propriété templateLink, spécifiez le chemin d’accès relatif du modèle lié, conformément au chemin d’accès du modèle parent.

Le modèle lié est nommé linkedTemplate.json, et il est stocké dans un sous-dossier appelé artefacts dans le chemin d’accès de l’emplacement où est stocké le modèle principal. Pour relativePath, vous pouvez utiliser une des valeurs suivantes :

  • ./artifacts/linkedTemplate.json
  • /artifacts/linkedTemplate.json
  • artifacts/linkedTemplate.json

La propriété relativePath est toujours relative au fichier de modèle dans lequel relativePath est déclaré. Ainsi, s’il existe un autre linkedTemplate2.json appelé à partir de linkedTemplate.json, et si linkedTemplate2.json est stocké dans le même sous-dossier artefacts, le relativePath spécifié dans linkedTemplate.json est simplement linkedTemplate2.json.

  1. Créez le modèle principal avec le code JSON suivant. Enregistrez le modèle principal sous azuredeploy.json sur votre ordinateur local. Ce tutoriel part du principe que vous avez enregistré dans le chemin d’accès c:\Templates\linkedTS\azuredeploy.json, mais vous pouvez utiliser n’importe quel chemin.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "location": {
          "type": "string",
          "defaultValue": "westus2",
          "metadata":{
            "description": "Specify the location for the resources."
          }
        },
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "metadata":{
            "description": "Specify the storage account type."
          }
        }
      },
      "variables": {
        "appServicePlanName": "[format('plan{0}', uniquestring(resourceGroup().id))]"
      },
      "resources": [
        {
          "type": "Microsoft.Web/serverfarms",
          "apiVersion": "2022-09-01",
          "name": "[variables('appServicePlanName')]",
          "location": "[parameters('location')]",
          "sku": {
            "name": "B1",
            "tier": "Basic",
            "size": "B1",
            "family": "B",
            "capacity": 1
          },
          "kind": "linux",
          "properties": {
            "perSiteScaling": false,
            "reserved": true,
            "targetWorkerCount": 0,
            "targetWorkerSizeId": 0
          }
        },
        {
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2022-09-01",
          "name": "createStorage",
          "properties": {
            "mode": "Incremental",
            "templateLink": {
              "relativePath": "artifacts/linkedTemplate.json"
            },
            "parameters": {
              "storageAccountType": {
                "value": "[parameters('storageAccountType')]"
              }
            }
          }
        }
      ]
    }
    

    Notes

    La valeur apiVersion de Microsoft.Resources/deployments doit être 2020-06-01 ou une version ultérieure.

  2. Créez un répertoire appelé artefacts dans le dossier dans lequel le modèle principal est enregistré.

  3. Créez le modèle lié avec le code JSON suivant :

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_ZRS",
            "Premium_LRS"
          ],
          "metadata": {
            "description": "Storage Account type"
          }
        },
        "location": {
          "type": "string",
          "defaultValue": "[resourceGroup().location]",
          "metadata": {
            "description": "Location for all resources."
          }
        }
      },
      "variables": {
        "storageAccountName": "[format('store{0}', uniquestring(resourceGroup().id))]"
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2022-09-01",
          "name": "[variables('storageAccountName')]",
          "location": "[parameters('location')]",
          "sku": {
            "name": "[parameters('storageAccountType')]"
          },
          "kind": "StorageV2",
          "properties": {}
        }
      ],
      "outputs": {
        "storageAccountName": {
          "type": "string",
          "value": "[variables('storageAccountName')]"
        }
      }
    }
    
  4. Enregistrez le modèle sous linkedTemplate.json dans le dossier artefacts.

Créer une spec de modèle

Les specs de modèle sont stockées dans des groupes de ressources. Créez un groupe de ressources, puis créez une spec de modèle avec le script suivant. Le nom de la spec de modèle est webSpec.

New-AzResourceGroup `
  -Name templateSpecRG `
  -Location westus2

New-AzTemplateSpec `
  -Name webSpec `
  -Version "1.0.0.0" `
  -ResourceGroupName templateSpecRG `
  -Location westus2 `
  -TemplateFile "c:\Templates\linkedTS\azuredeploy.json"

Lorsque vous avez terminé, vous pouvez afficher la spec de modèle à partir du portail Azure ou à l’aide de la cmdlet suivante :

Get-AzTemplateSpec -ResourceGroupName templatespecRG -Name webSpec

Déployer une spec de modèle

Vous pouvez maintenant déployer la spec de modèle. Le déploiement de la spec de modèle est identique à celui du modèle que celle-ci contient, à l’exception du fait que vous transmettez l’ID de ressource de la spec de modèle. Vous utilisez les mêmes commandes de déploiement et, si nécessaire, transmettez les valeurs de paramètres pour la spec de modèle.

New-AzResourceGroup `
  -Name webRG `
  -Location westus2

$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name webSpec -Version "1.0.0.0").Versions.Id

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName webRG

Étapes suivantes

Pour découvrir le déploiement d’une spec de modèle en tant que modèle lié, consultez Tutoriel : Déployer une spec de modèle en tant que modèle lié.