Implantar ambientes do DevTest Labs usando modelos aninhados

Uma implantação aninhada executa modelos do ARM (Azure Resource Manager) secundários em um modelo principal. Este artigo mostra um exemplo de aninhamento de modelos para implantar um ambiente do Azure DevTest Labs. Os ambientes do DevTest Labs contêm várias VMs (máquinas virtuais) de IaaS (infraestrutura como serviço) com recursos de PaaS (plataforma como serviço) instalados. Você pode provisionar os recursos de PaaS e as VMs usando modelos do ARM.

A decomposição de uma implantação em um conjunto de modelos direcionados e de uso específico oferece benefícios de testes, reutilização e legibilidade. Para obter informações gerais sobre os modelos aninhados, incluindo exemplos de código, confira Como usar modelos vinculados e aninhados ao implantar recursos do Azure.

Implantar modelos aninhados com o Visual Studio

O modelo de projeto do grupo de recursos do Azure no Visual Studio facilita o desenvolvimento e a depuração de modelos do ARM. Quando você adiciona um modelo aninhado ao arquivo de modelo principal azuredeploy.json, o Visual Studio adiciona os seguintes itens para tornar o modelo mais flexível:

  • A subpasta com o modelo secundário e o arquivo de parâmetros
  • Nomes de variáveis no arquivo de modelo principal
  • Dois parâmetros principais: _artifactsLocation e _artifactsLocationSasToken

No DevTest Labs, você armazena os modelos do ARM em um repositório Git vinculado ao laboratório. Quando você usa um dos modelos de repositório vinculado para criar um ambiente, a implantação copia os arquivos de modelo em um contêiner do Armazenamento do Azure no laboratório. Quando você adiciona um recurso de modelo aninhado ao repositório e ao arquivo de modelo principal, o Visual Studio identifica os valores _artifactsLocation e _artifactsLocationSasToken, copia as subpastas para o contêiner de armazenamento e insere a localização e o token SAS (Assinatura de Acesso Compartilhado) nos arquivos de parâmetros.

Estrutura de pasta de modelo aninhado

No exemplo de modelo a seguir, a pasta do repositório Git tem uma subpasta, nestedtemplates, com os arquivos de modelo aninhado NestOne.json e NestOne.parameters.json. O arquivo de modelo principal azuredeploy.json cria o URI para os modelos secundários usando a localização de artefatos, a pasta de modelo aninhado e o nome de arquivo de modelo aninhado. O URI para o arquivo de parâmetros é a localização dos artefatos, a pasta de modelo aninhado e o arquivo de parâmetros de modelo aninhado. Você pode adicionar mais subpastas de modelo aninhado à pasta principal, mas apenas em um nível de aninhamento.

A seguinte captura de tela mostra a estrutura do projeto no Visual Studio:

Captura de tela que mostra a estrutura de projeto do modelo aninhado no Visual Studio.

Exemplo de implantação aninhada

O seguinte exemplo mostra o arquivo principal de modelo do ARM azuredeploy.json para a implantação aninhada:


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

Próximas etapas