Implementar ambientes do DevTest Labs com modelos aninhados

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

A decomposição de uma implementação num conjunto de modelos específicos de objetivos específicos proporciona benefícios de teste, reutilização e legibilidade. Para obter informações gerais sobre modelos aninhados, incluindo exemplos de código, veja Utilizar modelos ligados e aninhados ao implementar recursos do Azure.

Implementar 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 adiciona um modelo aninhado ao ficheiro de modelo azuredeploy.json principal, o Visual Studio adiciona os seguintes itens para tornar o modelo mais flexível:

  • Uma subpasta com o modelo secundário e ficheiros de parâmetros
  • Nomes de variáveis no ficheiro de modelo principal
  • Dois parâmetros _artifactsLocation principais e _artifactsLocationSasToken

No DevTest Labs, armazena modelos do ARM num repositório Git que liga ao laboratório. Quando utiliza um dos modelos de repositório ligados para criar um novo ambiente, a implementação copia os ficheiros de modelo para um contentor do Armazenamento do Azure no laboratório. Quando adiciona um recurso de modelo aninhado ao repositório e ao ficheiro de modelo principal, o Visual Studio identifica os _artifactsLocation valores e _artifactsLocationSasToken , copia as subpastas para o contentor de armazenamento e insere a localização e o token de Assinatura de Acesso Partilhado (SaS) nos ficheiros de parâmetros.

Estrutura de pastas de modelos aninhadas

No exemplo de modelo seguinte, a pasta do repositório Git tem uma subpasta aninhada, com os ficheiros de modelo aninhados NestOne.json e NestOne.parameters.json. O ficheiro de modelo principal azuredeploy.json cria o URI para os modelos secundários com a localização dos artefactos, a pasta de modelo aninhada e o nome de ficheiro de modelo aninhado. O URI do ficheiro de parâmetros é a localização dos artefactos, a pasta de modelo aninhada e o ficheiro de parâmetros de modelo aninhado. Pode adicionar mais subpastas de modelo aninhadas à pasta primária, mas com apenas um nível de aninhamento.

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

Captura de ecrã a mostrar a estrutura do projeto de modelo aninhado no Visual Studio.

Exemplo de implementação aninhada

O exemplo seguinte mostra o ficheiro de modelo arm azuredeploy.json principal para a implementaçã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": {}

Passos seguintes