Partilhar via


Implantar ambientes do DevTest Labs usando modelos aninhados

Uma implantação aninhada executa modelos secundários do Azure Resource Manager (ARM) de dentro de um modelo principal. Este artigo mostra um exemplo de modelos de aninhamento para implantar um ambiente do 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. Você pode provisionar os recursos de PaaS e VMs usando modelos ARM.

Decompor uma implantação em um conjunto de modelos direcionados e específicos para fins fornece benefícios de teste, reutilização e legibilidade. Para obter informações gerais sobre modelos aninhados, incluindo exemplos de código, consulte Usando modelos vinculados e aninhados ao implantar recursos do Azure.

Nota

Os Ambientes de Implantação do Azure (ADE) são altamente recomendados para a criação de ambientes. O ADE permite que os desenvolvedores implantem rapidamente a infraestrutura de aplicativos usando modelos baseados em projetos, garantindo ambientes consistentes e seguros para suas equipes de desenvolvimento.

Para saber mais sobre os Ambientes de Implantação do Azure, consulte a documentação dos Ambientes de Implantação 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 ARM. Quando você adiciona um modelo aninhado ao arquivo de modelo de 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 arquivos de parâmetros
  • Nomes de variáveis no arquivo de modelo principal
  • Dois parâmetros principais, _artifactsLocation e _artifactsLocationSasToken

No DevTest Labs, você armazena modelos ARM em um repositório Git vinculado ao laboratório. Quando você usa um dos modelos de repositório vinculado para criar um novo ambiente, a implantação copia os arquivos de modelo em um contêiner de 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 _artifactsLocation valores e _artifactsLocationSasToken , copia as subpastas para o contêiner de armazenamento e insere o local e o token SaS (Assinatura de Acesso Compartilhado) nos arquivos de parâmetros.

Estrutura de pastas de modelo aninhado

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

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

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

Exemplo de implantação aninhada

O exemplo a seguir mostra o arquivo de modelo ARM de azuredeploy.json principal 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óximos passos