Déployer des environnements DevTest Labs en utilisant des modèles imbriqués

Un déploiement imbriqué exécute des modèles ARM (Azure Resource Manager) secondaires depuis un modèle principal. Cet article montre un exemple d’imbrication de modèles pour déployer un environnement Azure DevTest Labs. Les environnements DevTest Labs contiennent plusieurs machines virtuelles IaaS (Infrastructure-as-a-Service) avec des ressources PaaS (Platform-as-a-Service) installées. Vous pouvez provisionner les ressources PaaS et les machines virtuelles en utilisant des modèles ARM.

La décomposition d’un déploiement en un ensemble de modèles ciblés spécifiques à un certain usage offre des avantages en matière de test, de réutilisation et de lisibilité. Pour obtenir des informations générales sur les modèles imbriqués, y compris des exemples de code, consultez Utilisation de modèles liés et imbriqués lors du déploiement de ressources Azure.

Déployer des modèles avec imbriqués avec Visual Studio

Le modèle de projet de groupe de ressources Azure dans Visual Studio facilite le développement et le débogage de modèles ARM. Quand vous ajoutez un modèle imbriqué au fichier de modèle principal azuredeploy.json, Visual Studio ajoute les éléments suivants pour rendre le modèle plus flexible :

  • Un sous-dossier avec le modèle secondaire et des fichiers de paramètres
  • Des noms de variables dans le fichier de modèle principal
  • Deux paramètres importants, _artifactsLocation et _artifactsLocationSasToken

Dans DevTest Labs, vous stockez des modèles ARM dans un dépôt Git que vous liez au labo. Quand vous utilisez un des modèles de dépôt liés pour créer un nouvel environnement, le déploiement copie les fichiers de modèle dans un conteneur Stockage Azure dans le labo. Quand vous ajoutez une ressource de modèle imbriqué au dépôt et au fichier de modèle principal, Visual Studio identifie les valeurs de _artifactsLocation et de _artifactsLocationSasToken, copie les sous-dossiers dans le conteneur de stockage et insère l’emplacement et le jeton de signature d’accès partagé (SAS) dans les fichiers de paramètres.

Structure de dossiers des modèles imbriqués

Dans l’exemple de modèle suivant, le dossier du dépôt Git contient un sous-dossier, nestedtemplates, avec les fichiers de modèle imbriqués NestOne.json et NestOne.parameters.json. Le fichier de modèle principal azuredeploy.json génère l’URI pour les modèles secondaires en utilisant l’emplacement des artefacts, le dossier des modèles imbriqués et le nom de fichier des modèles imbriqués. L’URI du fichier de paramètres correspond à l’emplacement des artefacts, du dossier de modèles imbriqués et du fichier de paramètres des modèles imbriqués. Vous pouvez ajouter des sous-dossiers de modèles imbriqués au dossier principal, mais à un seul niveau d’imbrication.

La capture d’écran suivante montre la structure du projet dans Visual Studio :

Capture d’écran montrant la structure de projet de modèle imbriqué dans Visual Studio.

Exemple de déploiement imbriqué

L’exemple suivant montre le fichier du modèle ARM principal azuredeploy.json pour le déploiement imbriqué :


"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "_artifactsLocation": {
        "type": "string"
    },
    "_artifactsLocationSasToken": {
        "type": "securestring"
    }},
"variables": {
    "NestOneTemplateFolder": "nestedtemplates",
    "NestOneTemplateFileName": "NestOne.json",
    "NestOneTemplateParametersFileName": "NestOne.parameters.json"},
    "resources": [
    {
        "name": "NestOne",
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2016-09-01",
        "dependsOn": [ ],
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            },
            "parametersLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateParametersFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            }
        }    
    }],
"outputs": {}

Étapes suivantes