Extensões e funcionalidades das máquinas virtuais para o Windows

As extensões de máquina virtual (VM) do Azure são pequenas aplicações que proporcionam tarefas de automação e configuração pós-implementação nas VMs do Azure. Por exemplo, se uma máquina virtual exigir instalação de software, proteção antivírus ou a capacidade de executar um script dentro da VM, você poderá usar uma extensão de VM.

Você pode executar extensões de VM do Azure usando a CLI do Azure, o PowerShell, os modelos do Azure Resource Manager (ARM) e o portal do Azure. Você pode agrupar extensões com uma nova implantação de VM ou executá-las em qualquer sistema existente.

Este artigo fornece uma visão geral das extensões de VM do Azure, incluindo pré-requisitos e orientações sobre como detetar, gerenciar e remover extensões. Este artigo fornece informações generalizadas porque muitas extensões de VM estão disponíveis. Cada extensão tem uma configuração potencialmente exclusiva e sua própria documentação.

Casos de uso e exemplos

Cada extensão de VM do Azure tem um caso de uso específico. Seguem-se alguns exemplos:

  • Aplique as configurações de estado desejado (DSCs) do PowerShell a uma VM usando a extensão DSC para Windows.

  • Configure o monitoramento de uma VM usando o agente do Azure Monitor e as informações da VM.

  • Configure uma VM do Azure usando o Chef.

  • Configure o monitoramento de sua infraestrutura do Azure usando a extensão Datadog.

Além de extensões específicas do processo, uma extensão de script personalizado está disponível para máquinas virtuais Windows e Linux. A Extensão de Script Personalizado para Windows permite que qualquer script do PowerShell seja executado em uma VM. Os scripts personalizados são úteis para projetar implantações do Azure que exigem configuração além do que as ferramentas nativas do Azure podem fornecer.

Pré-requisitos

Analise os seguintes pré-requisitos para trabalhar com extensões de VM do Azure.

Agente de VM do Azure

Para manipular extensões na VM, você precisa do Agente de Máquina Virtual do Azure para Windows instalado. Esse agente também é conhecido como Agente de VM do Azure ou Agente Convidado do Windows. Ao se preparar para instalar extensões, lembre-se de que algumas extensões têm pré-requisitos individuais, como acesso a recursos ou dependências.

O Agente de VM do Azure gerencia interações entre uma VM do Azure e o controlador de malha do Azure. O agente é responsável por muitos aspetos funcionais da implantação e do gerenciamento de VMs do Azure, incluindo a execução de extensões de VM.

O Agente de VM do Azure é pré-instalado em imagens do Azure Marketplace. O agente também pode ser instalado manualmente em sistemas operacionais suportados.

O agente é executado em vários sistemas operacionais. No entanto, a estrutura de extensões tem um limite para os sistemas operacionais que as extensões usam. Algumas extensões não são suportadas em todos os sistemas operativos e podem emitir o código de erro 51 ("SO não suportado"). Verifique a capacidade de suporte da documentação da extensão individual.

Acesso à rede

Os pacotes de extensão são baixados do repositório de extensões do Armazenamento do Azure. Os carregamentos de status da extensão são postados no Armazenamento do Azure.

Se você usar uma versão com suporte do Agente de VM do Azure, não precisará permitir o acesso ao Armazenamento do Azure na região da VM. Você pode usar o Agente de VM para redirecionar a comunicação para o controlador de malha do Azure para comunicações do agente (por meio do HostGAPlugin recurso por meio do canal privilegiado no endereço IP privado 168.63.129.16). Se você estiver em uma versão sem suporte do Agente de VM, precisará permitir o acesso de saída ao Armazenamento do Azure nessa região a partir da VM.

Importante

Se você bloquear o acesso ao endereço IP 168.63.129.16 usando o firewall convidado ou por meio de um proxy, as extensões falharão. A falha ocorre mesmo se você usar uma versão suportada do Agente de VM ou configurar o acesso de saída. As portas 80 e 32526 são necessárias.

Os agentes só podem ser usados para baixar pacotes de extensão e relatar o status. Por exemplo, se uma instalação de extensão precisar baixar um script do GitHub (Extensão de Script Personalizado) ou exigir acesso ao Armazenamento do Azure (Backup do Azure), você precisará abrir outras portas de firewall ou NSG (grupo de segurança de rede). Extensões diferentes têm requisitos diferentes porque são aplicativos por direito próprio. Para extensões que exigem acesso ao Armazenamento do Azure ou à ID do Microsoft Entra, você pode permitir o acesso usando marcas de serviço do Azure NSG.

O Agente de VM do Azure não fornece suporte ao servidor proxy para habilitar o redirecionamento de solicitações de tráfego do agente. O Agente de VM depende do seu proxy personalizado (se você tiver um) para acessar recursos na Internet ou no host através do endereço IP 168.63.129.16.

Descubra extensões de VM

Muitas extensões de VM estão disponíveis para uso com VMs do Azure. Para ver uma lista completa, use o Get-AzVMExtensionImage cmdlet do PowerShell.

O comando a seguir lista todas as extensões de VM disponíveis no local da região Oeste dos EUA:

Get-AzVmImagePublisher -Location "West US" |
Get-AzVMExtensionImageType |
Get-AzVMExtensionImage | Select Type, Version

Este comando fornece uma saída semelhante ao exemplo a seguir:

Type                Version
----                -------
AcronisBackup       1.0.33
AcronisBackup       1.0.51
AcronisBackupLinux  1.0.33
AlertLogicLM        1.3.0.1
AlertLogicLM        1.3.0.0
AlertLogicLM        1.4.0.1

Executar extensões de VM

As extensões de VM do Azure são executadas em VMs existentes, o que é útil quando você precisa fazer alterações de configuração ou recuperar a conectividade em uma VM já implantada. As extensões de VM também podem ser agrupadas com implantações de modelo ARM. Usando extensões com modelos ARM, você pode implantar e configurar VMs do Azure sem intervenção pós-implantação.

Você pode usar os seguintes métodos para executar uma extensão em uma VM existente.

Nota

Alguns dos exemplos a seguir usam "<placeholder>" valores de parâmetro nos comandos. Antes de executar cada comando, certifique-se de substituir quaisquer "<placeholder>" valores por valores específicos para sua configuração.

PowerShell

Existem vários comandos do PowerShell para executar extensões individuais. Para ver uma lista, use o comando Get-Command e filtre em Extensão:

Get-Command Set-Az*Extension* -Module Az.Compute

Este comando fornece uma saída semelhante ao exemplo a seguir:

CommandType     Name                                          Version    Source
-----------     ----                                          -------    ------
Cmdlet          Set-AzVMAccessExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMADDomainExtension                     4.5.0      Az.Compute
Cmdlet          Set-AzVMAEMExtension                          4.5.0      Az.Compute
Cmdlet          Set-AzVMBackupExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMBginfoExtension                       4.5.0      Az.Compute
Cmdlet          Set-AzVMChefExtension                         4.5.0      Az.Compute
Cmdlet          Set-AzVMCustomScriptExtension                 4.5.0      Az.Compute
Cmdlet          Set-AzVMDiagnosticsExtension                  4.5.0      Az.Compute
Cmdlet          Set-AzVMDiskEncryptionExtension               4.5.0      Az.Compute
Cmdlet          Set-AzVMDscExtension                          4.5.0      Az.Compute
Cmdlet          Set-AzVMExtension                             4.5.0      Az.Compute
Cmdlet          Set-AzVMSqlServerExtension                    4.5.0      Az.Compute
Cmdlet          Set-AzVmssDiskEncryptionExtension             4.5.0      Az.Compute

O exemplo a seguir usa a extensão de script personalizada para baixar um script de um repositório GitHub para a máquina virtual de destino e, em seguida, executar o script.

Set-AzVMCustomScriptExtension -ResourceGroupName "<myResourceGroup>" `
    -VMName "<myVM>" -Name "<myCustomScript>" `
    -FileUri "https://raw.githubusercontent.com/neilpeterson/nepeters-azure-templates/master/windows-custom-script-simple/support-scripts/Create-File.ps1" `
    -Run "Create-File.ps1" -Location "<myVMregion>"

O exemplo a seguir usa a extensão VMAccess para redefinir a senha administrativa de uma VM do Windows para uma senha temporária. Depois de executar esse código, você deve redefinir a senha no primeiro login.

$cred=Get-Credential

Set-AzVMAccessExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myVMAccess" `
    -Location "myVMregion" -UserName $cred.GetNetworkCredential().Username `
    -Password $cred.GetNetworkCredential().Password -typeHandlerVersion "2.0"

Você pode usar o comando Set-AzVMExtension para iniciar qualquer extensão de VM.

Portal do Azure

Você pode aplicar extensões de VM a uma VM existente por meio do portal do Azure. Selecione a VM no portal, selecione Extensões + Aplicativos e, em seguida, selecione + Adicionar. Escolha a extensão desejada na lista de extensões disponíveis e siga as instruções do assistente.

O exemplo a seguir mostra a instalação da extensão Microsoft Antimalware do portal do Azure:

Captura de ecrã da caixa de diálogo para instalar a extensão Microsoft Antimalware.

Modelos do Azure Resource Manager

Você pode adicionar extensões de VM a um modelo ARM e executá-las com a implantação do modelo. Ao implantar uma extensão com um modelo, você pode criar implantações do Azure totalmente configuradas.

O exemplo JSON a seguir é de um modelo ARM que implanta um conjunto de VMs com balanceamento de carga e um banco de dados SQL do Azure e, em seguida, instala um aplicativo .NET Core em cada VM. A extensão VM cuida da instalação do software.

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

Para obter mais informações sobre como criar modelos ARM, consulte Máquinas virtuais em um modelo ARM.

Ajude a proteger os dados de extensão da VM

Quando você executa uma extensão de VM, pode ser necessário incluir informações confidenciais, como credenciais, nomes de contas de armazenamento e chaves de acesso. Muitas extensões de VM incluem uma configuração protegida que criptografa dados e apenas os descriptografa dentro da VM de destino. Cada extensão tem um esquema de configuração protegido específico, e cada esquema é detalhado na documentação específica da extensão.

O exemplo JSON a seguir mostra uma instância da extensão de script personalizada para Windows. O comando a ser executado inclui um conjunto de credenciais. Neste exemplo, o comando a ser executado não é criptografado.

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ],
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

Mover a commandToExecute propriedade para a protected configuração ajuda a proteger a cadeia de execução, conforme mostrado no exemplo a seguir:

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'),copyindex())]",
    "[variables('musicstoresqlName')]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File configure-music-app.ps1 -user ',parameters('adminUsername'),' -password ',parameters('adminPassword'),' -sqlserver ',variables('musicstoresqlName'),'.database.windows.net')]"
    }
    }
}

Em uma VM IaaS (infraestrutura como serviço) do Azure que usa extensões, no console de certificados, você pode ver certificados que têm o assunto Gerador de Certificados CRP do Windows Azure. Em uma VM RDFE (Front-End) RedDog clássica, esses certificados têm o nome de assunto Gerenciamento de Serviço do Windows Azure para Extensões.

Esses certificados protegem a comunicação entre a VM e seu host durante a transferência de configurações protegidas (senha e outras credenciais) usadas pelas extensões. O controlador de malha do Azure cria os certificados e os passa para o Agente de VM do Azure. Se você parar e iniciar a VM todos os dias, o controlador de malha poderá criar um novo certificado. O certificado é armazenado no armazenamento de certificados pessoal do computador. Estes certificados podem ser eliminados. O Agente de VM do Azure recria certificados, se necessário.

Como os agentes e extensões são atualizados

Agentes e extensões compartilham o mesmo mecanismo de atualização automática.

Quando uma atualização está disponível e as atualizações automáticas estão habilitadas, a atualização é instalada na VM somente após uma extensão ou outro modelo de VM ser alterado. As alterações podem incluir:

  • Discos de dados
  • Extensões
  • Tags de extensão
  • Contêiner de diagnóstico de inicialização
  • Segredos do SO convidado
  • Tamanho da VM
  • Perfil de rede

Os editores disponibilizam atualizações para as regiões em vários momentos. É possível que você tenha VMs em diferentes regiões em diferentes versões.

Nota

Algumas atualizações podem exigir regras de firewall adicionais. Para obter mais informações, consulte Acesso à rede.

Listar extensões implantadas em uma VM

Você pode usar o seguinte comando para listar as extensões implantadas em uma VM:

$vm = Get-AzVM -ResourceGroupName "<myResourceGroup>" -VMName "<myVM>"
$vm.Extensions | select Publisher, VirtualMachineExtensionType, TypeHandlerVersion

Este comando produz uma saída semelhante ao exemplo a seguir:

Publisher             VirtualMachineExtensionType          TypeHandlerVersion
---------             ---------------------------          ------------------
Microsoft.Compute     CustomScriptExtension                1.9

Atualizações do agente

O Agente de VM do Azure contém apenas código de manipulação de extensão. O código de provisionamento do Windows é separado. Você pode desinstalar o Agente de VM do Azure. Não é possível desabilitar a atualização automática do Agente de VM do Azure.

O código de manipulação de extensão é responsável pelas seguintes tarefas:

  • Comunique-se com a malha do Azure.
  • Manipule as operações de extensão da VM, como instalações, status de relatório, atualização das extensões individuais e remoção de extensões. As atualizações contêm correções de segurança, correções de bugs e aprimoramentos no código de manipulação de extensões.

Para verificar qual versão você está executando, consulte Detetar o Agente de VM do Azure.

Atualizações de extensões

Quando uma atualização de extensão está disponível e as atualizações automáticas são habilitadas, se um modelo de VM for alterado, o Agente de VM do Azure baixará e atualizará a extensão.

As atualizações automáticas de extensão são secundárias ou hotfix. Você pode optar por receber ou desativar atualizações menores ao provisionar a extensão. O exemplo a seguir mostra como atualizar automaticamente versões secundárias em um modelo ARM usando o "autoUpgradeMinorVersion": true, parâmetro:

    "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-windows/scripts/configure-music-app.ps1"
        ]
    },

Para obter as últimas correções de bugs de versões secundárias, é altamente recomendável que você sempre selecione a atualização automática em suas implantações de extensão. Não é possível desativar atualizações de hotfix que contenham correções de segurança ou bugs de chave.

Se você desabilitar as atualizações automáticas ou precisar atualizar uma versão principal, use o comando Set-AzVMExtension e especifique a versão de destino.

Como identificar atualizações de extensão

Há algumas maneiras de identificar atualizações para uma extensão.

Identificar se a extensão está definida com autoUpgradeMinorVersion em uma VM

Você pode exibir o modelo de VM para determinar se a extensão é provisionada com o autoUpgradeMinorVersion parâmetro. Para verificar o modelo de VM, use o comando Get-AzVm e forneça o grupo de recursos e o nome da VM da seguinte maneira:

 $vm = Get-AzVm -ResourceGroupName "myResourceGroup" -VMName "myVM"
 $vm.Extensions

O exemplo de saída a seguir mostra que o autoUpgradeMinorVersion parâmetro está definido como true:

ForceUpdateTag              :
Publisher                   : Microsoft.Compute
VirtualMachineExtensionType : CustomScriptExtension
TypeHandlerVersion          : 1.9
AutoUpgradeMinorVersion     : True

Identificar quando ocorre um evento autoUpgradeMinorVersion

Para ver quando ocorreu uma atualização para a extensão, você pode revisar os logs do agente na VM em C:\WindowsAzure\Logs\WaAppAgent.log.

O exemplo a seguir mostra a VM com Microsoft.Compute.CustomScriptExtension a versão 1.8 instalada e um hotfix disponível para a versão 1.9.

[INFO]  Getting plugin locations for plugin 'Microsoft.Compute.CustomScriptExtension'. Current Version: '1.8', Requested Version: '1.9'
[INFO]  Auto-Upgrade mode. Highest public version for plugin 'Microsoft.Compute.CustomScriptExtension' with requested version: '1.9', is: '1.9'

Permissões do agente

Para executar suas tarefas, o Agente de VM do Azure precisa ser executado como Sistema Local.

Solucionar problemas de extensões de VM

Cada extensão de VM pode ter etapas específicas de solução de problemas. Por exemplo, quando você usa a extensão de script personalizado, você pode encontrar detalhes de execução de script localmente na VM onde a extensão é executada.

As seguintes ações de solução de problemas se aplicam a todas as extensões de VM:

  • Para verificar o Log do Agente de VM do Azure, examine a atividade quando sua extensão estava sendo provisionada em C:\WindowsAzure\Logs\WaAppAgent.log.

  • Verifique os logs de extensão para obter mais detalhes em C:\WindowsAzure\Logs\Plugins<extensionName>.

  • Verifique as seções de solução de problemas na documentação específica da extensão para obter códigos de erro, problemas conhecidos e outras informações específicas da extensão.

  • Observe os logs do sistema. Verifique se há outras operações que possam ter interferido na extensão, como uma instalação de longa duração de outro aplicativo que exigiu acesso exclusivo ao gerenciador de pacotes.

  • Em uma VM, se houver uma extensão existente com um estado de provisionamento com falha, qualquer outra nova extensão não será instalada.

Razões comuns para falhas de extensão

Aqui estão algumas razões comuns pelas quais uma extensão pode falhar:

  • As extensões têm 20 minutos para serem executadas. (As exceções são Script Personalizado, Chef e DSC, que têm 90 minutos.) Se sua implantação exceder esse tempo, ele será marcado como um tempo limite. A causa desse problema pode ser VMs de poucos recursos ou outras configurações de VM ou tarefas de inicialização estão consumindo grandes quantidades de recursos enquanto a extensão está tentando provisionar.

  • Os pré-requisitos mínimos não são atendidos. Algumas extensões têm dependências em SKUs de VM, como imagens HPC. As extensões podem ter determinados requisitos de acesso à rede, como a comunicação com o Armazenamento do Azure ou serviços públicos. Outros exemplos podem ser o acesso a repositórios de pacotes, a falta de espaço em disco ou restrições de segurança.

  • O acesso ao gerenciador de pacotes é exclusivo. Em alguns casos, uma configuração de VM de longa execução e uma instalação de extensão podem entrar em conflito porque ambas precisam de acesso exclusivo ao gerenciador de pacotes.

Ver estado da extensão

Depois que uma extensão de VM for executada em uma VM, use o comando Get-AzVM para retornar o status da extensão. O Substatuses[0] resultado mostra que o provisionamento de extensão foi bem-sucedido, o que significa que ele foi implantado com êxito na VM. Se você vir o Substatuses[1] resultado, a execução da extensão dentro da VM falhou.

Get-AzVM -ResourceGroupName "myResourceGroup" -VMName "myVM" -Status

O resultado é semelhante ao seguinte exemplo:

Extensions[0]           :
  Name                  : CustomScriptExtension
  Type                  : Microsoft.Compute.CustomScriptExtension
  TypeHandlerVersion    : 1.9
  Substatuses[0]        :
    Code                : ComponentStatus/StdOut/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : Windows PowerShell \nCopyright (C) Microsoft Corporation. All rights reserved.\n
  Substatuses[1]        :
    Code                : ComponentStatus/StdErr/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : The argument 'cseTest%20Scriptparam1.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the

-File parameter.
  Statuses[0]           :
    Code                : ProvisioningState/failed/-196608
    Level               : Error
    DisplayStatus       : Provisioning failed
    Message             : Finished executing command

Você também pode encontrar o status de execução da extensão no portal do Azure. Selecione a VM, selecione Extensões e, em seguida, selecione a extensão desejada.

Execute novamente uma extensão de VM

Em certos casos, talvez seja necessário executar novamente uma extensão de VM. Você pode executar novamente uma extensão removendo a extensão e, em seguida, executando novamente a extensão com um método de execução de sua escolha. Para remover uma extensão, use o comando Remove-AzVMExtension da seguinte maneira:

Remove-AzVMExtension -ResourceGroupName "myResourceGroup" -VMName "myVM" -Name "myExtensionName"

Você também pode remover uma extensão no portal do Azure. Selecione uma VM, selecione Extensões e, em seguida, selecione a extensão desejada. Selecione Desinstalar.

Referência de extensão de VM comum

A tabela a seguir fornece algumas referências comuns para extensões de VM.

Nome da extensão Description
Extensão de Script Personalizado para o Windows Execute scripts em uma máquina virtual do Azure.
Extensão DSC para Windows Aplique as configurações de estado desejado do PowerShell a uma máquina virtual.
Extensão do Azure Diagnostics Gerencie o Diagnóstico do Azure.
Extensão VMAccess Gerencie usuários e credenciais.

Próximos passos

Para obter mais informações sobre extensões de VM, consulte Extensões e recursos de máquina virtual do Azure.