Implementar plantillas anidadas de Azure Resource Manager para probar entornosDeploy nested Azure Resource Manager templates for testing environments

Una implementación anidada le permite ejecutar otras plantillas de Azure Resource Manager desde una plantilla principal de Resource Manager.A nested deployment allows you to execute other Azure Resource Manager templates from within a main Resource Manager template. Igualmente, le permite descomponer su implementación en un conjunto de plantillas de destino y de propósito específico.It enables you to decompose your deployment into a set of targeted and purpose-specific templates. Proporciona ventajas en cuanto a las pruebas, la reutilización y la legibilidad.It provides benefits in terms of testing, reuse, and readability. El artículo Uso de plantillas vinculadas al implementar recursos de Azure le proporciona una buena descripción general de esta solución con varios ejemplos de código.The article Using linked templates when deploying Azure resources provides a good overview of this solution with several code samples. En este artículo se proporciona un ejemplo que es específico de Azure DevTest Labs.This article provides an example that's specific to Azure DevTest Labs.

Parámetros claveKey parameters

Si bien puede crear su propia plantilla de Resource Manager desde cero, le recomendamos que use el proyecto del grupo de recursos de Azure en Visual Studio, lo que facilitará el desarrollo y la depuración de plantillas.While you can create your own Resource Manager template from scratch, we recommend that you use the Azure Resource Group project in Visual Studio, which makes it easy to develop and debug templates. Cuando agrega un recurso de implementación anidado a azuredeploy.json, Visual Studio agrega varios elementos para hacer que la plantilla sea más flexible.When you add a nested deployment resource to azuredeploy.json, Visual Studio adds several items to make the template more flexible. Estos elementos incluyen la subcarpeta con la plantilla secundaria y el archivo de parámetros, los nombres de las variables dentro del archivo de la plantilla principal y dos parámetros para la ubicación de almacenamiento de los nuevos archivos.These items include the subfolder with the secondary template and parameters file, variable names within the main template file, and two parameters for the storage location for the new files. _artifactsLocation y _artifactsLocationSasToken son los parámetros clave que usa DevTest Labs.The _artifactsLocation and _artifactsLocationSasToken are the key parameters that the DevTest Labs uses.

Si no está familiarizado con el funcionamiento de DevTest Labs con los entornos, consulte Create multi-VM environments and PaaS resources with Azure Resource Manager templates (Crear entornos de varias VM y recursos de PaaS con las plantillas de Azure Resource Manager).If you aren't familiar with how the DevTest Labs works with environments, see Create multi-VM environments and PaaS resources with Azure Resource Manager templates. Sus plantillas se almacenan en el repositorio vinculado al laboratorio en DevTest Labs.Your templates are stored in the repository linked to the lab in DevTest Labs. Cuando crea un nuevo entorno con esas plantillas, los archivos se mueven a un contenedor de Azure Storage en el laboratorio.When you create a new environment with those templates, the files are moved into an Azure Storage container in the lab. Para poder identificar y copiar los archivos anidados, DevTest Labs identifica los parámetros _artifactsLocation y _artifactsLocationSasToken y copia las subcarpetas hasta el contenedor de almacenamiento.To be able to identify and copy the nested files, DevTest Labs identifies the _artifactsLocation and _artifactsLocationSasToken parameters and copies the subfolders up to the storage container. A continuación, inserta automáticamente la ubicación y el token de firma de acceso compartido (SaS) en los parámetros.Then, it automatically inserts the location and Shared Access Signature (SaS) token into parameters.

Ejemplo de implementación anidadaNested deployment example

Aquí tiene un ejemplo simple de una implementación anidada:Here is a simple example of a nested deployment:


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

La carpeta del repositorio que contiene esta plantilla tiene una subcarpeta nestedtemplates con los archivos NestOne.json y NestOne.parameters.json.The folder in the repository containing this template has a subfolder nestedtemplates with the files NestOne.json and NestOne.parameters.json. En azuredeploy.json, el URI para la plantilla se compila usando la ubicación de los artefactos, la carpeta de plantillas anidadas y el nombre del archivo de la plantilla anidada.In the azuredeploy.json, URI for the template is built using the artifacts location, nested template folder, nested template file name. De manera similar, el URI de los parámetros se crea mediante la ubicación de los artefactos, la carpeta de plantillas anidadas y el archivo de parámetros para la plantilla anidada.Similarly, URI for the parameters is built using the artifacts location, nested template folder, and parameter file for the nested template.

Aquí está la imagen de la misma estructura del proyecto en Visual Studio:Here is the image of the same project structure in Visual Studio:

Estructura del proyecto en Visual Studio

Puede agregar carpetas adicionales en la carpeta principal, pero no puede ir más allá de un solo nivel.You can add additional folders in the primary folder but not any deeper than a single level.

Pasos siguientesNext steps

Consulte estos artículos para obtener detalles sobre los entornos:See the following articles for details about environments: