Criar ambientes a partir de modelos ARM

Use ambientes Azure DevTest Labs para fornecer laboratórios de forma fácil e consistente com múltiplas máquinas virtuais (VMs) e recursos de plataforma como serviço (PaaS). Este artigo descreve como criar ambientes DevTest Labs a partir de templates Azure Resource Manager (ARM ). Use esta abordagem para criar um laboratório para uma aplicação web multinível, como uma aplicação web com um backend de base de dados SQL.

Os recursos num ambiente DevTest Labs partilham o mesmo ciclo de vida. Podes geri-los em conjunto e acompanhar o custo dos recursos PaaS individuais no ambiente de laboratório, tal como acompanhas os custos das VMs individuais.

Pode configurar um laboratório para usar templates de ambiente ARM de repositórios públicos ou privados de templates Git. O diagrama seguinte mostra como o DevTest Labs utiliza um modelo ARM de um repositório público ou privado para implementar um ambiente que contém VMs e outros recursos.

Diagrama que mostra como obter templates ARM de repositórios Git e usá-los para implementar ambientes com recursos PaaS.

Pré-requisitos

  • Para adicionar ou configurar repositórios de modelos para um laboratório, é necessário ter, no mínimo, permissões de Contribuidor no laboratório.
  • Para criar ambientes do DevTest Labs a partir dos modelos ARM disponíveis, é necessário ter, no mínimo, permissões de DevTest User no laboratório.
  • Para executar o script PowerShell no ambiente de criação automático, é necessário o Azure PowerShell com o módulo Az.Resources instalado.

Atribuir permissões de subscrição para implementação de templates

Se a sua organização exigir permissões de âmbito de subscrição para gestão de templates delegados, atribua o papel de Contribuidor do Azure Lab Services no âmbito da subscrição.

Importante

Para a criação do ambiente DevTest Labs, os utilizadores do laboratório ainda precisam de pelo menos permissões de utilizador DevTest no laboratório. O papel de Contribuidor do Azure Lab Services não substitui as permissões ao nível do laboratório do DevTest Labs.

  1. No portal Azure, abra a sua subscrição.
  2. Selecione Access control (IAM)>Adicionar>Adicionar atribuição de função.
  3. Procure e selecione Azure Lab Services Contributor.
  4. Selecione Próximo, escolha o utilizador, grupo ou principal do serviço, e depois selecione Rever + atribuir.

Para acesso de privilégio mínimo, utilize uma função personalizada que inclua apenas as permissões exigidas pelo seu modelo e pelo fluxo de trabalho do laboratório, em vez de permissões abrangentes ao nível de toda a subscrição.

O seguinte exemplo de função personalizada limita o acesso à visibilidade de criação e implementação do ambiente DevTest Labs. Adicione apenas as ações que o seu modelo exige.

{
    "Name": "DevTest Labs Environment Template Deployer",
    "Description": "Create and read DevTest Labs environments from approved ARM templates.",
    "Actions": [
        "Microsoft.Authorization/*/read",
        "Microsoft.DevTestLab/labs/read",
        "Microsoft.DevTestLab/labs/EnsureCurrentUserProfile/action",
        "Microsoft.DevTestLab/labs/CreateEnvironment/action",
        "Microsoft.DevTestLab/labs/artifactSources/armTemplates/read",
        "Microsoft.DevTestLab/labs/policySets/EvaluatePolicies/action",
        "Microsoft.DevTestLab/labs/users/environments/read",
        "Microsoft.DevTestLab/labs/users/environments/write",
        "Microsoft.Resources/deployments/read",
        "Microsoft.Resources/deployments/operations/read",
        "Microsoft.Resources/subscriptions/resourceGroups/read"
    ],
    "NotActions": [],
    "DataActions": [],
    "NotDataActions": [],
    "AssignableScopes": [
        "/subscriptions/<subscription-id>"
    ]
}

Limitações

Os ambientes criados a partir de templates de ambiente ARM nos DevTest Labs apresentam as seguintes limitações:

  • A funcionalidade de auto-desligamento para VMs não é suportada.

  • As seguintes políticas laboratoriais não são aplicadas nem avaliadas:

    • Número de VMs por usuário de laboratório
    • Número de VMs premium por usuário
    • Número de discos premium por utilizador

    Por exemplo, mesmo que a política do laboratório permita a cada utilizador criar no máximo cinco VMs, o utilizador pode implementar um template de ambiente ARM que cria dezenas de VMs.

Configurar repositórios de modelos para laboratórios

Pode configurar o seu laboratório para usar modelos de ambiente ARM do repositório público ARM do DevTest Labs e de outros repositórios Git públicos ou privados. Quando permite o acesso do laboratório a um repositório de templates, os utilizadores do laboratório podem criar rapidamente ambientes selecionando templates no portal do Azure.

O repositório público de modelos ARM do DevTest Labs inclui modelos de ambiente pré-autorados, como Web App com SQL Database e exemplos de cluster Azure Service Fabric. Para uma experiência de início fluida com recursos PaaS, os templates têm parâmetros de entrada mínimos.

Você pode usar os modelos de ambiente público como estão ou personalizá-los para atender às suas necessidades. Você também pode sugerir revisões ou adições a um modelo público enviando uma solicitação pull no repositório de modelos públicos do GitHub.

Também pode armazenar modelos de ambiente noutros repositórios Git públicos ou privados, e adicionar esses repositórios ao seu laboratório para tornar os templates disponíveis a todos os utilizadores do laboratório. Para instruções, consulte Armazenar templates ARM nos repositórios Git e Adicionar repositórios de templates aos laboratórios.

Definir configurações de ambiente público

Pode ativar o acesso do laboratório ao repositório público de templates do DevTest Labs para um laboratório novo ou existente. Quando ativa o acesso ao repositório, pode selecionar quais os modelos de ambiente a disponibilizar aos utilizadores do laboratório.

Configurar o acesso ao ambiente público para um novo laboratório

Para configurar o acesso ao repositório do ambiente público quando criares um novo laboratório, no separador Definições Básicas , define a opção de ambientes públicos para Ligado ou Desligado. Esta opção está definida como Ligado por defeito.

Captura de tela que mostra como habilitar repositórios de ambiente público para um laboratório durante o processo de criação do laboratório.

Configurar o acesso ao ambiente público para um laboratório existente

Para ativar ou desativar o acesso a repositórios de ambiente público para um laboratório existente:

  1. Na página de Visão Geraldo portal Azure para o seu laboratório, selecione Configuração e políticas em Definições no menu de navegação à esquerda.

  2. Na página de Configuração e políticas , expanda as bases da máquina virtual no menu esquerdo e selecione ambientes públicos.

  3. Na página de ambientes públicos , defina a opção Ativar Ambientes Públicos para este laboratóriocomo Sim ou Não.

    Captura de tela que mostra como habilitar todos os repositórios de ambiente público para um recurso de laboratório existente.

  4. Selecione Guardar.

Selecionar modelos de ambiente público disponíveis

Quando ativas o repositório público de ambiente para um laboratório, todos os modelos de ambiente no repositório ficam disponíveis para os utilizadores do teu laboratório por defeito. Pode optar por desativar o acesso a modelos selecionados. Os modelos desativados já não aparecem na lista de ambientes que os utilizadores podem criar.

Para impedir o acesso a modelos específicos do ambiente:

  1. Na página de Configuração e políticas> do portal Azure do teu laboratórioBases> de máquinas virtuaisAmbientes públicos, desmarca as caixas de seleção ao lado dos ambientes que queres desativar.

  2. Selecione Guardar.

Captura de tela que mostra como desmarcar repositórios de ambiente público para um laboratório para desabilitar o acesso dos usuários.

Configurar permissões de utilizador do ambiente

Por defeito, é atribuída aos utilizadores do laboratório a função de Leitor nos ambientes que criam. Os leitores não podem parar, iniciar ou modificar recursos do ambiente como servidores SQL ou bases de dados. Para permitir que os utilizadores do laboratório editem recursos nos seus ambientes, conceda-lhes o papel de Contribuinte no grupo de recursos do seu ambiente.

  1. Na página de Visão Geraldo portal Azure para o seu laboratório, selecione Configuração e políticas em Definições no menu de navegação à esquerda.

  2. Na página de Configuração e políticas , expanda Definições no menu esquerdo e selecione Definições de laboratório.

  3. Na página de definições do Laboratório , em Acesso ao Ambiente, defina a opção de direitos de utilizador do grupo de Recursos para Contribuidor.

  4. Selecione Guardar.

Captura de tela que mostra como definir permissões de função de Colaborador para usuários de laboratório no DevTest Labs.

Criar ambientes a partir de modelos

Se configurar o seu laboratório para usar repositórios de modelos públicos ou privados, pode criar um ambiente selecionando um modelo ARM disponível. Siga estes passos para criar um ambiente a partir de um modelo.

  1. Na página de Visão Geraldo portal Azure para o seu laboratório, selecione Os Meus Ambientes em O Meu Laboratório no menu de navegação à esquerda.

  2. Na página Os Meus Ambientes , selecione Adicionar.

  3. Na página Escolher uma base , selecione Aplicação Web com Base de Dados SQL.

    Captura de ecrã que mostra a Web App com base de dados SQL selecionada a partir dos modelos de ambiente disponíveis no Azure DevTest Labs.

  4. No painel de Adicionar , introduza um nome de Ambiente e configure as outras definições de parâmetros para a aplicação web e os recursos da base de dados SQL.

    Captura de ecrã que mostra a seleção de Web App com base de dados SQL e a introdução das definições do ambiente no Azure DevTest Labs.

    • Cada modelo de ambiente ARM inclui parâmetros únicos. Quando adiciona um ambiente, deve introduzir valores para todos os parâmetros necessários, indicados por asteriscos vermelhos.
    • Alguns valores de parâmetros num ficheiro de modelo ARM azuredeploy.parameters.json produzem campos de definição em branco sem valor predefinido no painel Adicionar. Estes valores incluem GEN-UNIQUE, GEN-UNIQUE-[N], GEN-SSH-PUB-KEY, e GEN-PASSWORD.
    • Podes usar segredos do Azure Key Vault para parâmetros string segura, como palavras-passe. Para mais informações, consulte Guardar segredos no Azure Key Vault.
  5. Selecione Adicionar. O ambiente começa a provisionar imediatamente.

O processo para provisionar um ambiente pode levar muito tempo. O tempo total depende do número de instâncias de serviço, VMs e outros recursos que o DevTest Labs cria como parte do ambiente de laboratório.

Pode monitorizar o estado do provisionamento na página Meus ambientes . Selecione Atualizar na barra de ferramentas para atualizar a vista da página e verificar o estado atual. Enquanto o provisionamento está em andamento, o status do ambiente está sendo criado. Após a conclusão do provisionamento, o status muda para Pronto.

Captura de tela que mostra como ver o status de provisionamento para o ambiente de laboratório.

A implementação cria um novo grupo de recursos para provisionar todos os recursos ambientais definidos pelo modelo ARM. Selecione o ambiente na lista Meus ambientes para ver o grupo de recursos e todos os recursos que o modelo criou.

Selecione um recurso na lista para ver propriedades e ações disponíveis.

Automatizar a criação de ambientes

Se precisares de criar múltiplos ambientes para desenvolvimento ou testes, podes usar o Azure PowerShell ou o CLI do Azure para automatizar a implementação de ambientes a partir de templates ARM. Os passos seguintes mostram como automatizar a implementação de templates em ambiente ARM usando o comando Azure PowerShell New-AzResource .

Também pode automatizar a implementação usando o comando CLI do Azure az deployment group create . Para obter mais informações, consulte Implantar recursos com modelos ARM e a CLI do Azure.

  1. Armazene o modelo do ambiente ARM num repositório Git e adicione o repositório ao seu laboratório.

  2. Guarde o seguinte script PowerShell no seu computador como deployenv.ps1. Este script chama o modelo ARM para criar o ambiente no laboratório.

    #Requires -Module Az.Resources
    
    [CmdletBinding()]
    
    param (
    # ID of the Azure subscription for the lab
    [string] [Parameter(Mandatory=$true)] $SubscriptionId,
    
    # Name of the lab in which to create the environment
    [string] [Parameter(Mandatory=$true)] $LabName,
    
    # Name of the template repository connected to the lab
    [string] [Parameter(Mandatory=$true)] $RepositoryName,
    
    # Name of the template (folder name in the GitHub repository)
    [string] [Parameter(Mandatory=$true)] $TemplateName,
    
    # Name of the environment to create in the lab
    [string] [Parameter(Mandatory=$true)] $EnvironmentName,
    
    # The parameters to pass to the template. Each parameter is prefixed with "-param_".
    # For example, if the template has a parameter named "TestVMName" with a value of "MyVMName",
    # the string in $Params is "-param_TestVMName MyVMName".
    # This convention allows the script to dynamically handle different templates.
    [Parameter(ValueFromRemainingArguments=$true)]
        $Params
    )
    
    # Sign in to Azure, or comment out this statement to completely automate environment creation.
    Connect-AzAccount
    
    # Select the subscription for your lab.  
    Set-AzContext -SubscriptionId $SubscriptionId | Out-Null
    
    # Get the user ID to use later in the script.
    $UserId = $((Get-AzADUser -UserPrincipalName ((Get-AzContext).Account).Id).Id)
    
    # Get the lab location.
    $lab = Get-AzResource -ResourceType "Microsoft.DevTestLab/labs" -Name $LabName
    if ($lab -eq $null) { throw "Unable to find lab $LabName in subscription $SubscriptionId." }
    
    # Get information about the repository connected to your lab.
    $repository = Get-AzResource -ResourceGroupName $lab.ResourceGroupName `
        -ResourceType 'Microsoft.DevTestLab/labs/artifactsources' `
        -ResourceName $LabName `
        -ApiVersion 2016-05-15 `
        | Where-Object { $RepositoryName -in ($_.Name, $_.Properties.displayName) } `
        | Select-Object -First 1
    if ($repository -eq $null) { throw "Unable to find repository $RepositoryName in lab $LabName." }
    
    # Get information about the ARM template base for the environment.
    $template = Get-AzResource -ResourceGroupName $lab.ResourceGroupName `
        -ResourceType "Microsoft.DevTestLab/labs/artifactSources/armTemplates" `
        -ResourceName "$LabName/$($repository.Name)" `
        -ApiVersion 2016-05-15 `
        | Where-Object { $TemplateName -in ($_.Name, $_.Properties.displayName) } `
        | Select-Object -First 1
    if ($template -eq $null) { throw "Unable to find template $TemplateName in lab $LabName." }
    
    # Build the template parameters by using parameter names and values.
    $parameters = Get-Member -InputObject $template.Properties.contents.parameters -MemberType NoteProperty | Select-Object -ExpandProperty Name
    $templateParameters = @()
    
    # Extract the custom parameters from $Params and format them as name/value pairs.
    $Params | ForEach-Object {
        if ($_ -match '^-param_(.*)' -and $Matches[1] -in $parameters) {
            $name = $Matches[1]                
        } elseif ( $name ) {
            $templateParameters += @{ "name" = "$name"; "value" = "$_" }
            $name = $null #reset name variable
        }
    }
    
    # Create an object to hold the necessary template properties.
    $templateProperties = @{ "deploymentProperties" = @{ "armTemplateId" = "$($template.ResourceId)"; "parameters" = $templateParameters }; }
    
    # Deploy the environment in your lab by using the New-AzResource command.
    New-AzResource -Location $Lab.Location `
        -ResourceGroupName $lab.ResourceGroupName `
        -Properties $templateProperties `
        -ResourceType 'Microsoft.DevTestLab/labs/users/environments' `
        -ResourceName "$LabName/$UserId/$EnvironmentName" `
        -ApiVersion '2016-05-15' -Force
    
    Write-Output "Environment $EnvironmentName completed."
    
  3. Para usar o script, execute o seguinte comando. Atualiza os marcadores no comando com os teus próprios valores de laboratório.

    .\DeployLabEnvironment.ps1 `
        -SubscriptionId "<Subscription ID>" `
        -LabName "<LabName>" `
        -ResourceGroupName "<LabResourceGroupName>" `
        -RepositoryName "<TemplateRepoName>" `
        -TemplateName "<TemplateFolderName>" `
        -EnvironmentName "<EnvironmentName>"