Executar Scripts em Máquinas Virtuais do Azure com Extensão de Script Personalizado

À medida que sua equipe começa a provisionar e configurar mais máquinas virtuais (VMs) do Azure Windows, em algum momento, vocês ficarão cansados de reinventar a roda. Vocês precisam de automação! Neste artigo, acompanhe-me enquanto eu o guio passo a passo para começar a usar as extensões de script personalizadas do Azure para executar scripts no Azure em suas VMs.

Se sua equipe estiver em um ambiente Windows, uma das melhores ferramentas para automatizar a configuração do servidor é o PowerShell. Ao usar o módulo Azure PowerShell, sua organização pode aproveitar o poder do PowerShell não apenas para automatizar tarefas locais, mas também para executar comandos em várias VMs do Azure de uma só vez, em vez de uma por vez.

Uma das funcionalidades que a Microsoft nos disponibilizou é chamada de extensão de script personalizada do Azure. A extensão de script personalizada é uma extensão de máquina virtual do Azure que o agente da VM executa para executar código PowerShell arbitrário em suas VMs, usando a API do Azure em vez de entrar na VM ou usar a remotação do PowerShell.

Executar comandos dessa maneira oferece várias vantagens. A execução de comandos usando a extensão personalizada do Azure no Windows:

  • fornecer segurança aumentada, não sendo necessário abrir portas de rede para a remotação do PowerShell
  • permite a fácil execução de código PowerShell na inicialização da VM
  • transfere automaticamente recursos do armazenamento do Azure para sua VM como parte do processo de provisionamento
  • uma maneira fácil de executar scripts do PowerShell armazenados em várias contas de armazenamento do Azure

Habilitar uma extensão de script personalizado do Azure para Windows pode ser feito de várias maneiras. Neste artigo, estaremos focando em habilitar a extensão de script personalizado via PowerShell, mas você também pode habilitar a extensão através de um modelo do Azure Resource Manager (ARM).

Como exemplo simples, vamos supor que você queira garantir que o PowerShell remoting esteja habilitado em uma VM do Azure em sua assinatura. Para fazer isso, você precisaria executar o seguinte comando localmente em cada VM:

Enable-PSRemoting -Force

Vamos criar uma extensão de script personalizado para fazer isso.

Usando o Azure para executar um script em uma VM

Primeiro, crie um script do PowerShell chamado Enable-PSRemoting.ps1 em seu computador local com o comando acima. Este script precisa ser executado em uma VM do Azure. Para fazer isso, vamos criar outro pequeno script do PowerShell chamado New-CustomScriptExtension.ps1 para fazer o upload dele para o Azure e criar uma extensão de script personalizado para executá-lo. Antes de irmos muito longe, você vai precisar de alguns itens:

  • O nome do grupo de recursos e da conta de armazenamento do Azure que irá armazenar o script
  • O nome do contêiner de armazenamento do Azure
  • O nome da VM
  • O nome do grupo de recursos do Azure em que a VM está

Este script pode ser dividido em duas partes; fazer o upload do pequeno script do PowerShell para o Azure e criar a extensão de script personalizado. Todo o resto é necessário para unir esses dois processos.

Fazendo o upload de um script do PowerShell para o Azure

Primeiro, faremos o upload do script Enable-PSRemoting.ps1 para a conta de armazenamento Azure ($StorageAccountName) dentro do container ($ContainerName) no grupo de recursos ($ResourceGroupName).

Copying Enable-PSRemoting.ps1 to Azure
$saParams = @{ 'ResourceGroupName' = $ResourceGroupName 'Name' = $StorageAccountName } $storageContainer = Get-AzureRmStorageAccount @saParams |Get-AzureStorageContainer -Container $ContainerName $bcParams = @{ 'File' = 'C:\Enable-PSRemoting.ps1' 'BlobType' = 'Block' 'Blob' = ' Enable-PSRemoting.ps1' } $storageContainer | Set-AzureStorageBlobContent @bcParams

Executando a Extensão de Script Personalizada

Quando você executar New-CustomScriptExtension.ps1, esse script fará o upload do script Enable-PSRemoting.ps1 para a conta de armazenamento Azure especificada.

Agora que o script está armazenado no Azure, você pode executá-lo por meio da extensão de script personalizada para a VM:

  • Nome: $VMName
  • Grupo de Recursos: $rgName
  • Conta de Armazenamento: $saName
  • Container de Armazenamento: $scName

Abra um editor de texto para o New-CustomScriptExtension.ps1 e cole o exemplo abaixo. Quando você executar isso, ele executará a extensão de script personalizada do Azure para o Windows, que executará o script PowerShell Enable-PSRemoting.ps1 que você enviou anteriormente.

New-CustomScriptExtension.ps1
# Obtenha a VM que precisamos configurar $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # Obtenha a chave da conta de armazenamento $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## Habilite a extensão de script personalizada e execute o script $scriptParams = @{ 'ResourceGroupName' = $rgName 'VMName' = $VMName 'Name' = 'Enable-PSRemoting.ps1' 'Location' = $vm.Location 'StorageAccountName' = $saName 'StorageAccountKey' = $key 'FileName' = 'Enable-PSRemoting.ps1' 'ContainerName' = $scName 'Run' = 'Enable-PSRemoting.ps1' } Set-AzureRmVMCustomScriptExtension @scriptParams

Resumo

Uma vez concluído este script, você pode verificar se Enable-PSRemoting.ps1 foi executado na VM e se o PowerShell remoting foi habilitado com sucesso. Agora você deve conseguir usar Invoke-Command em sua VM do Azure.

Ao aproveitar a extensão de script personalizado do Azure no Windows, você agora tem a capacidade de executar remotamente qualquer tipo de script do PowerShell em suas VMs do Azure.

Source:
https://adamtheautomator.com/azure-run-script-on-vm/