Implementación de entornos de DevTest Labs mediante plantillas anidadas

Una implementación anidada ejecuta plantillas de Azure Resource Manager (ARM) secundarias desde una plantilla principal. En este artículo se muestra un ejemplo de anidamiento de plantillas para implementar un entorno de Azure DevTest Labs. Los entornos de DevTest Labs contienen varias máquinas virtuales (VM) de infraestructura como servicio (IaaS) con recursos de plataforma como servicio (PaaS) instalados. Puede aprovisionar los recursos y las máquinas virtuales de PaaS mediante plantillas de ARM.

Descomponer una implementación en un conjunto de plantillas con un propósito específico proporciona ventajas de prueba, reutilización y legibilidad. Para obtener información general sobre las plantillas anidadas, con ejemplos de código, consulte Uso de plantillas vinculadas y anidadas al implementar recursos de Azure.

Implementación de plantillas anidadas con Visual Studio

La plantilla de proyecto del grupo de recursos de Azure de Visual Studio facilita el desarrollo y la depuración de plantillas de ARM. Al agregar una plantilla anidada al archivo de plantilla azuredeploy.json principal, Visual Studio agrega los siguientes elementos para que la plantilla sea más flexible:

  • Una subcarpeta con la plantilla secundaria y archivos de parámetros
  • Nombres de variables en el archivo de plantilla principal
  • Dos parámetros clave, _artifactsLocation y _artifactsLocationSasToken

En DevTest Labs, se almacenan las plantillas de ARM en un repositorio de Git que se vincula al laboratorio. Cuando se usa una de las plantillas de repositorio vinculado para crear un nuevo entorno, la implementación copia los archivos de la plantilla en un contenedor de Azure Storage en el laboratorio. Al agregar un recurso de plantilla anidada al repositorio y al archivo de plantilla principal, Visual Studio identifica los valores _artifactsLocation y _artifactsLocationSasToken, copia las subcarpetas en el contenedor de almacenamiento e inserta la ubicación y el token de firma de acceso compartido (SaS) en los archivos de parámetros.

Estructura de carpetas de plantillas anidadas

En el ejemplo de plantilla siguiente, la carpeta del repositorio de Git tiene una subcarpeta nestedtemplates con los archivos de la plantilla anidada NestOne.json y NestOne.parameters.json. El archivo de plantilla principal azuredeploy.json compila el URI de las plantillas secundarias mediante la ubicación de los artefactos, la carpeta de plantillas anidadas y el nombre de archivo de la plantilla anidada. El URI del archivo de parámetros es la ubicación de los artefactos, la carpeta de plantillas anidadas y el archivo de parámetros de plantilla anidada. Puede agregar más subcarpetas de plantilla anidadas a la carpeta principal, pero solo en un nivel de anidamiento.

En la captura de pantalla siguiente se muestra la estructura del proyecto en Visual Studio:

Screenshot that shows the nested template project structure in Visual Studio.

Ejemplo de implementación anidada

En el ejemplo siguiente se muestra el archivo de plantilla de ARM azuredeploy.json principal para la implementación anidada:


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

Pasos siguientes