Tutorial: Instalar aplicativos em conjuntos de escala de máquina virtual com o Azure PowerShell

Para executar aplicações em instâncias de máquina virtual (VM) num conjunto de dimensionamento, primeiro tem de instalar os componentes da aplicação e os ficheiros necessários. Num tutorial anterior, aprendeu a criar e utilizar uma imagem de VM personalizada para implementar as suas instâncias de VM. Esta imagem personalizada inclui configurações e instalações de aplicações manuais. Pode também automatizar a instalação de aplicações num conjunto de dimensionamento após cada instância de VM ser implementada ou atualizar uma aplicação que já é executada num conjunto de dimensionamento. Neste tutorial, ficará a saber como:

  • Instalar automaticamente aplicações no seu conjunto de dimensionamento
  • Utilizar a Extensão de Script Personalizado do Azure
  • Atualizar uma aplicação em execução num conjunto de dimensionamento

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Azure Cloud Shell

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Captura de tela que mostra um exemplo de Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Botão para iniciar o Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Captura de tela que mostra o botão Cloud Shell no portal do Azure

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e Linux ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou comando.

O que é a Extensão de Script Personalizado do Azure?

A Extensão de Script Personalizado transfere e executa scripts em VMs do Azure. Esta extensão é útil para a configuração pós-implementação, instalação de software ou qualquer outra tarefa de gestão/configuração. Os scripts podem ser transferidos a partir do armazenamento do Azure ou do GitHub, ou fornecidos para o portal do Azure no runtime da extensão.

A extensão Script Personalizado integra-se com modelos do Azure Resource Manager. Ele também pode ser usado com a CLI do Azure, o Azure PowerShell, o portal do Azure ou a API REST. Para obter mais informações, veja a Descrição geral da Extensão de Script Personalizado.

Para ver a Extensão de Script Personalizado em ação, crie um conjunto de dimensionamento que instala o servidor Web IIS e dá como resultado o nome de anfitrião da instância de VM do conjunto de dimensionamento. A definição da Extensão de Script Personalizado transfere um script de exemplo do GitHub, instala os pacotes necessários e escreve o nome de anfitrião da instância de VM numa página HTML simples.

Criar um conjunto de dimensionamento

Crie um grupo de recursos com New-AzResourceGroup. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização E.U.A Leste:

New-AzResourceGroup -Name myResourceGroup -Location "East US"

Agora crie um conjunto de escala de máquina virtual com New-AzVmss. Para distribuir o tráfego pelas instâncias de VM individuais, é também criado um balanceador de carga. O balanceador de carga inclui regras para distribuir o tráfego na porta TCP 80. Ele também permite o tráfego da área de trabalho remota na porta TCP 3389 e a comunicação remota do PowerShell na porta TCP 5985. Quando solicitado, você pode definir suas próprias credenciais administrativas para as instâncias de VM no conjunto de escala:

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -Location "EastUS" `
  -UpgradePolicyMode "Manual" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" 

A criação e configuração de todas as VMs e recursos do conjunto de dimensionamento demora alguns minutos.

Criar a definição da Extensão de Script Personalizado

O Azure PowerShell utiliza uma tabela hash para armazenar o ficheiro a transferir e o comando a executar. No exemplo seguinte, é utilizado um script de exemplo do GitHub. Em primeiro lugar, crie este objeto de configuração da seguinte forma:

$customConfig = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

Agora, aplique a extensão de script personalizado com Add-AzVmssExtension. O objeto de configuração definido anteriormente é transmitido para a extensão. Atualize a extensão nas instâncias de perfil do conjunto de escala com Update-AzVmss.

# Get information about the scale set
$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"

# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzVmssExtension `
  -VirtualMachineScaleSet $vmss `
  -Name "customScript" `
  -Publisher "Microsoft.Compute" `
  -Type "CustomScriptExtension" `
  -TypeHandlerVersion 1.9 `
  -Setting $customConfig

# Update the scale set
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Adicionar a extensão às instâncias do conjunto de escala existente

Execute uma atualização manual para aplicar a extensão atualizada a todas as instâncias de conjunto de escala existentes. A atualização pode levar alguns minutos para ser concluída.

Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId "*"

Cada instância de VM no conjunto de dimensionamento transfere e executa o script do GitHub. Num exemplo mais complexo, podem ser instalados vários ficheiros e componentes de aplicações. Se o conjunto de dimensionamento for aumentado verticalmente, as novas instâncias de VM aplicam automaticamente a mesma definição da Extensão de Script Personalizado e instalam a aplicação necessária.

Permitir o tráfego para a aplicação

Para permitir o acesso ao aplicativo Web básico, crie um grupo de segurança de rede com New-AzNetworkSecurityRuleConfig e New-AzNetworkSecurityGroup. Para obter mais informações, consulte Rede para conjuntos de escala de máquina virtual do Azure.

#Create a rule to allow traffic over port 80
$nsgFrontendRule = New-AzNetworkSecurityRuleConfig `
  -Name myFrontendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

#Create a network security group and associate it with the rule
$nsgFrontend = New-AzNetworkSecurityGroup `
  -ResourceGroupName  "myResourceGroup" `
  -Location EastUS `
  -Name myFrontendNSG `
  -SecurityRules $nsgFrontendRule

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName  "myResourceGroup" `
  -Name myVnet

$frontendSubnet = $vnet.Subnets[0]

$frontendSubnetConfig = Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name mySubnet `
  -AddressPrefix $frontendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgFrontend

Set-AzVirtualNetwork -VirtualNetwork $vnet

Testar o seu conjunto de dimensionamento

Para ver o seu servidor Web em ação, obtenha o endereço IP público do seu balanceador de carga com Get-AzPublicIpAddress. O exemplo a seguir exibe o endereço IP criado no grupo de recursos myResourceGroup :

Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress

Introduza o endereço IP público do balanceador de carga num browser. O balanceador de carga distribui o tráfego para uma das suas instâncias de VM, conforme mostra o exemplo seguinte:

Página Web de base no IIS

Deixe o seu browser aberto para que possa ver uma versão atualizada no próximo passo.

Alterar a política de atualização

Na seção anterior, para aplicar o aplicativo atualizado a todas as instâncias do conjunto de escalas, era necessária uma atualização manual. Para permitir que as atualizações sejam aplicadas automaticamente a todas as instâncias de conjuntos de escala existentes, atualize a política de atualização de manual para automática. Para obter mais informações sobre políticas de atualização, consulte Políticas de atualização para conjuntos de dimensionamento de máquinas virtuais.

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Update-Azvmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet" `
    -UpgradePolicyMode "Automatic" `
    -VirtualMachineScaleSet $vmss

Atualizar a implementação da aplicação

Ao longo do ciclo de vida de um conjunto de dimensionamento, poderá precisar de implementar uma versão atualizada da sua aplicação. Com a Extensão de Script Personalizado, pode referenciar um script de implementação atualizado e, em seguida, voltar a aplicar a extensão ao seu conjunto de dimensionamento.

Crie uma nova definição de configuração com o nome customConfigv2. Esta definição executa uma versão v2 atualizada do script de instalação de aplicações:

$customConfigv2 = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis-v2.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis-v2.ps1"
}

Atualize a configuração da Extensão de Script Personalizada para as instâncias de VM em seu conjunto de escala. A definição customConfigv2 é usada para aplicar a versão atualizada do aplicativo ao conjunto de escalas:

$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"
 
$vmss.VirtualMachineProfile.ExtensionProfile[0].Extensions[0].Settings = $customConfigv2
 
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

Como o conjunto de escala agora está usando uma política de atualização automática, o aplicativo atualizado será aplicado automaticamente às instâncias de conjunto de escala existentes. Atualize seu navegador da Web para ver o aplicativo atualizado. Para ver a versão atualizada, atualize o site no seu browser:

Página Web atualizada no IIS

Clean up resources (Limpar recursos)

Para remover o conjunto de escalas e os recursos adicionais, exclua o grupo de recursos e todos os seus recursos com Remove-AzResourceGroup. O parâmetro -Force confirma que pretende eliminar os recursos sem uma linha de comandos adicional para fazê-lo. O parâmetro -AsJob devolve o controlo à linha de comandos, sem aguardar a conclusão da operação.

Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob

Próximos passos

Neste tutorial, aprendeu a instalar e atualizar automaticamente aplicações no seu conjunto de dimensionamento com o Azure PowerShell:

  • Instalar automaticamente aplicações no seu conjunto de dimensionamento
  • Utilizar a Extensão de Script Personalizado do Azure
  • Atualizar uma aplicação em execução num conjunto de dimensionamento

Prossiga para o próximo tutorial para saber como dimensionar automaticamente o seu conjunto de dimensionamento.