Share via


Distribuire ambienti DevTest Labs usando modelli annidati

Una distribuzione annidata esegue modelli secondari di Azure Resource Manager (ARM) dall'interno di un modello principale. Questo articolo illustra un esempio di annidamento dei modelli per distribuire un ambiente Azure DevTest Labs. Gli ambienti DevTest Labs contengono più macchine virtuali IaaS (Infrastructure-as-a-Service) con risorse PaaS (Platform-as-a-Service) installate. È possibile effettuare il provisioning delle risorse PaaS e delle macchine virtuali usando i modelli di Resource Manager.

La scomposizione di una distribuzione in un set di modelli specifici dello scopo di destinazione offre vantaggi di test, riutilizzo e leggibilità. Per informazioni generali sui modelli annidati, inclusi gli esempi di codice, vedere Uso di modelli collegati e annidati durante la distribuzione delle risorse di Azure.

Distribuire modelli annidati con Visual Studio

Il modello di progetto Gruppo di risorse di Azure in Visual Studio semplifica lo sviluppo e il debug di modelli arm. Quando si aggiunge un modello annidato al file di modello azuredeploy.json principale, Visual Studio aggiunge gli elementi seguenti per rendere il modello più flessibile:

  • Sottocartella con il modello secondario e i file di parametri
  • Nomi di variabili nel file modello principale
  • Due parametri chiave e _artifactsLocation_artifactsLocationSasToken

In DevTest Labs i modelli arm sono archiviati in un repository Git collegato al lab. Quando si usa uno dei modelli di repository collegati per creare un nuovo ambiente, la distribuzione copia i file modello in un contenitore di Archiviazione di Azure nel lab. Quando si aggiunge una risorsa modello annidata al repository e al file modello principale, Visual Studio identifica i _artifactsLocation valori e _artifactsLocationSasToken , copia le sottocartelle nel contenitore di archiviazione e inserisce il percorso e il token di firma di accesso condiviso nei file dei parametri.

Struttura della cartella del modello annidata

Nell'esempio di modello seguente la cartella del repository Git ha una sottocartella, nestedtemplates, con i file di modello annidati NestOne.json e NestOne.parameters.json. Il file modello principale azuredeploy.json compila l'URI per i modelli secondari usando il percorso degli artefatti, la cartella del modello annidata e il nome file del modello annidato. L'URI per il file di parametri è il percorso degli artefatti, la cartella del modello annidata e il file di parametri del modello annidato. È possibile aggiungere altre sottocartelle modello annidate alla cartella primaria, ma a un solo livello di annidamento.

Lo screenshot seguente mostra la struttura del progetto in Visual Studio:

Screenshot che mostra la struttura del progetto modello annidata in Visual Studio.

Esempio di distribuzione annidata

L'esempio seguente mostra il file di modello arm azuredeploy.json principale per la distribuzione annidata:


"$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": {}

Passaggi successivi