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 necessitar de instalação de software, proteção antivírus ou capacidade de executar um script no seu interior, pode utilizar uma extensão VM.

Pode executar extensões Azure VM utilizando os modelos Azure CLI, PowerShell, Azure Resource Manager (modelos ARM) e o portal Azure. Pode agregar extensões com uma nova implementação de VM ou executá-las contra qualquer sistema existente.

Este artigo fornece uma visão geral das extensões Azure VM, pré-requisitos para a sua utilização, e orientações sobre como detetar, gerir e remover. Este artigo fornece informações generalizadas porque muitas extensões VM estão disponíveis. Cada um tem uma configuração potencialmente única e a sua própria documentação.

Utilizar caixas e amostras

Cada extensão Azure VM tem uma caixa de utilização específica. Os exemplos incluem:

Além de extensões específicas do processo, está disponível uma extensão de Script Personalizado para máquinas virtuais Windows e Linux. A extensão de Script Personalizado para Windows permite que qualquer script PowerShell seja executado num VM. Scripts personalizados são úteis para projetar implementações Azure que requerem configuração além do que a ferramenta nativa Azure pode fornecer.

Pré-requisitos

Agente Azure VM

Para lidar com a extensão no VM, precisa do Agente Azure VM para windows (também chamado de Windows Guest Agent) instalado. Algumas extensões individuais têm pré-requisitos, tais como o acesso a recursos ou dependências.

O Agente Azure VM gere interações entre um Azure VM e o controlador de tecido Azure. O agente é responsável por muitos aspetos funcionais de implantação e gestão de VMs Azure, incluindo extensões VM em execução.

O Agente Azure VM está pré-instalado em imagens do Azure Marketplace. Também pode ser instalado manualmente em sistemas operativos suportados.

O agente funciona em vários sistemas operativos. No entanto, o quadro de extensões tem um limite para os sistemas operativos que as extensões utilizam. Algumas extensões não são suportadas em todos os sistemas operativos e podem emitir código de erro 51 ("OS não suportado"). Verifique a documentação de extensão individual para obter suporte.

Acesso à rede

Os pacotes de extensão são descarregados do repositório de extensão Azure Storage. Os uploads de estado de extensão são enviados para o Azure Storage.

Se utilizar uma versão suportada do Agente VM Azure, não precisa de permitir o acesso ao Azure Storage na região VM. Pode utilizar o agente para redirecionar a comunicação para o controlador de tecidoS Azure para comunicações de agentes (função HostGAPlugin através do canal privilegiado no IP privado IP 168.63.129.16). Se estiver numa versão não apoiada do agente, tem de permitir o acesso de saída ao Azure Storage naquela região a partir do VM.

Importante

Se bloqueou o acesso a 168.63.129.16 usando a firewall do hóspede ou usando um representante, as extensões falham mesmo que esteja a usar uma versão suportada do agente ou tenha configurado acesso de saída. São necessários os portos 80, 443 e 32526.

Os agentes só podem ser usados para descarregar pacotes de extensão e estado de reporte. Por exemplo, se uma instalação de extensão precisar de descarregar um script do GitHub (extensão de Script Personalizado) ou precisar de acesso ao Azure Storage (Azure Backup), então precisa de abrir portas adicionais de firewall ou grupo de segurança de rede (NSG). Extensões diferentes têm requisitos diferentes, porque são aplicações por si só. Para extensões que requerem acesso ao Azure Storage ou ao Azure Ative Directory, pode permitir o acesso utilizando tags de serviço Azure NSG.

O Agente VM da Azure não tem suporte para servidor de procuração para redirecionar os pedidos de tráfego de agentes através. Isto significa que o Agente Azure VM contará com o seu proxy personalizado (se tiver um) para aceder aos recursos na internet ou no anfitrião através do IP 168.63.129.16.

Descubra extensões VM

Muitas extensões VM estão disponíveis para uso com VMs Azure. Para ver uma lista completa, utilize a Get-AzVMExtensionImage. O exemplo a seguir enumera todas as extensões disponíveis na localização WestUS :

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

Executar extensões VM

As extensões Azure VM funcionam em VMs existentes. Isso é útil quando precisa de fazer alterações de configuração ou recuperar a conectividade num VM já implantado. As extensões VM também podem ser agregadas com implementações de modelos ARM. Ao utilizar extensões com modelos ARM, pode implantar e configurar VMs Azure sem intervenção pós-implantação.

Pode utilizar os seguintes métodos para executar uma extensão contra um VM existente.

PowerShell

Existem vários comandos PowerShell para executar extensões individuais. Para ver uma lista, utilize o Comando De obter e o filtro na extensão:

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

Este comando fornece uma saída semelhante à seguinte:

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 utiliza a extensão do Script Personalizado para descarregar um script de um repositório GitHub na máquina virtual alvo 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 "West US"

O exemplo a seguir utiliza a extensão VMAccess para redefinir a palavra-passe administrativa de um Windows VM numa senha temporária. Depois de executar este código, deverá redefinir a palavra-passe no início do sessão.

$cred=Get-Credential

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

Pode utilizar o comando Set-AzVMExtension para iniciar qualquer extensão VM.

Portal do Azure

Pode aplicar extensões VM a um VM existente através do portal Azure. Selecione o VM no portal, selecione Extensões e, em seguida, selecione Adicionar. Escolha a extensão que deseja da lista de extensões disponíveis e siga as instruções no assistente.

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

Screenshot of the dialog for installing the Microsoft Antimalware extension.

Modelos do Azure Resource Manager

Pode adicionar extensões VM a um modelo ARM e executá-las com a implementação do modelo. Quando implementar uma extensão com um modelo, pode criar implementações Azure totalmente configuradas.

Por exemplo, o seguinte JSON é retirado de um modelo ARM completo que implementa um conjunto de VMs equilibrados de carga e uma base de dados Azure SQL, e depois instala uma aplicação .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 a criação de modelos ARM, consulte máquinas virtuais num modelo de Gestor de Recursos Azure.

Ajude a proteger os dados de extensão VM

Quando executar uma extensão VM, pode ser necessário incluir informações sensíveis, tais como credenciais, nomes de contas de armazenamento e chaves de acesso. Muitas extensões VM incluem uma configuração protegida que encripta dados e apenas o desencripta dentro do VM alvo. Cada extensão tem um esquema de configuração protegido específico, e cada uma é detalhada em documentação específica de extensão.

O exemplo a seguir mostra uma instância da extensão do Script Personalizado para Windows. O comando a executar inclui um conjunto de credenciais. Neste exemplo, o comando a executar não é encriptado.

{
    "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 fixar a cadeia de execução, como mostra o exemplo seguinte:

{
    "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')]"
    }
    }
}

Numa infraestrutura Azure como um VM de serviço (IaaS) que utiliza extensões, na consola de certificados, poderá ver certificados que têm o gerador de certificados Windows Azure CRP. Num VM clássico da RedDog Front End (RDFE), estes certificados têm o nome de Contat de Windows Azure Service Management for Extensions.

Estes certificados asseguram a comunicação entre o VM e o seu anfitrião durante a transferência de definições protegidas (palavra-passe e outras credenciais) que as extensões utilizam. Os certificados são construídos pelo controlador de tecido Azure e passados para o Agente Azure VM. Se parar e iniciar o VM todos os dias, o controlador de tecidos pode criar um novo certificado. O certificado está guardado na loja de certificados pessoais do computador. Estes certificados podem ser eliminados. O Agente Azure VM recria certificados se necessário.

Como os agentes e extensões são atualizados

Os agentes e extensões partilham o mesmo mecanismo de atualização automática.

Quando uma atualização está disponível e as atualizações automáticas estão ativadas, a atualização só é instalada no VM depois de haver uma alteração a uma extensão ou após outras alterações do modelo VM, tais como:

  • Discos de dados
  • Extensões
  • Etiquetas de extensão
  • Recipiente de diagnóstico de arranque
  • Os segredos do CONVIDADO OS
  • Tamanho da VM
  • Perfil de rede

Os editores disponibilizam atualizações às regiões em vários momentos, pelo que é possível que possa ter VMs em diferentes regiões em diferentes versões.

Nota

Algumas atualizações podem requerer regras adicionais de firewall. Ver acesso à Rede.

Extensões de listagem implantadas num VM

$vm = Get-AzVM -ResourceGroupName "myResourceGroup" -VMName "myVM"
$vm.Extensions | select Publisher, VirtualMachineExtensionType, TypeHandlerVersion
Publisher             VirtualMachineExtensionType          TypeHandlerVersion
---------             ---------------------------          ------------------
Microsoft.Compute     CustomScriptExtension                1.9

Atualizações de agentes

O Agente Azure VM contém apenas um código de tratamento de extensões. O código de provisionamento do Windows é separado. Pode desinstalar o Agente Azure VM. Não é possível desativar a atualização automática do Agente VM Azure.

O código de tratamento de extensões é responsável por:

  • Comunicando com o tecido Azure.
  • Manuseamento das operações de extensão VM, tais como instalações, estado de reporte, 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 erros e melhorias no código de tratamento de extensões.

Para verificar que versão está a executar, consulte detete o Agente VM.

Atualizações de extensão

Quando uma atualização de extensão está disponível e as atualizações automáticas são ativadas, após a alteração do modelo VM , o Agente VM Azure descarrega e atualiza a extensão.

As atualizações automáticas de extensão são menores ou hotfix. Pode optar por não fazer pequenas atualizações quando forrou a extensão. O exemplo a seguir mostra como atualizar automaticamente as versões menores num modelo ARM utilizando "autoUpgradeMinorVersion": true,:

    "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 mais recentes correções de erros de libertação menor, recomendamos vivamente que selecione sempre a atualização automática nas suas implementações de extensão. Não é possível excluir atualizações de hotfix que transportam correções de segurança ou de erros chave.

Se desativar atualizações automáticas ou necessitar de atualizar uma versão importante, utilize a Configuração-AzVMExtension e especifique a versão alvo.

Como identificar atualizações de extensão

Identifique se a extensão é definida com autoUpgradeMinorVersion em um VM

Pode ver pelo modelo VM se a extensão foi prevista.autoUpgradeMinorVersion Para verificar, utilize o Get-AzVm e forneça o grupo de recursos e o nome VM da seguinte forma:

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

O seguinte exemplo de saída mostra que autoUpgradeMinorVersion está definido para true:

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

Identifique quando ocorreu um evento autoUpgradeMinorVersion

Para ver quando ocorreu uma atualização da extensão, reveja os registos do agente no VM em C:\WindowsAzure\Logs\WaAppAgent.log.

No exemplo seguinte, o VM tinha Microsoft.Compute.CustomScriptExtension a versão 1.8 instalada. Um hotfix estava 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 de agente

Para executar as suas tarefas, o agente precisa de funcionar como Sistema Local.

Extensões de VM de resolução de problemas

Cada extensão VM pode ter etapas específicas de resolução de problemas. Por exemplo, quando utilizar a extensão do Script Personalizado, pode encontrar detalhes de execução de scripts localmente no VM onde a extensão foi executada.

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

  • Para verificar o Registo do Agente VM do Azure, consulte a atividade quando a sua extensão estava a ser disponibilizada em C:\WindowsAzure\Logs\WaAppAgent.log.

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

  • Consulte secções de resolução de problemas em documentação específica de extensão para códigos de erro, problemas conhecidos e outras informações específicas da extensão.

  • Olhe para os registos do sistema. Verifique se existem outras operações que possam ter interferido com a extensão, como uma instalação de longa duração de outra aplicação que exigia acesso exclusivo ao gestor do pacote.

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

Razões comuns para falhas de extensão

  • As extensões têm 20 minutos para correr. (Exceções são Script Personalizado, Chef e DSC, que têm 90 minutos.) Se a sua implantação exceder desta vez, está marcada como um intervalo. A causa disto pode ser VMs de baixo recurso, ou outras configurações VM ou tarefas de arranque estão a consumir grandes quantidades de recursos enquanto a extensão está a tentar proviser.

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

  • O acesso ao gestor de pacotes é exclusivo. Em alguns casos, uma configuração e instalação de extensão de VM de longa duração podem entrar em conflito porque ambos precisam de acesso exclusivo ao gestor do pacote.

Ver estado de extensão

Depois de uma extensão VM ter sido executada contra um VM, use o Get-AzVM para devolver o estado da extensão. Substatuses[0] mostra que a extensão conseguiu, o que significa que foi implantada com êxito no VM. Mas Substatuses[1] mostra que a execução da extensão dentro do 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

Também pode encontrar o estado de execução da extensão no portal Azure. Selecione o VM, selecione extensões e, em seguida, selecione a extensão desejada.

Reensundirem uma extensão VM

Pode haver casos em que uma extensão VM precisa de ser reexecutada. Pode refazer uma extensão removendo-a e, em seguida, repetindo a extensão com um método de execução à sua escolha. Para remover uma extensão, utilize remove-AzVMExtension da seguinte forma:

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

Também pode remover uma extensão no portal Azure:

  1. Selecione um VM.
  2. Selecione Extensões.
  3. Selecione a extensão.
  4. Selecione Desinstalar.

Referência comum da extensão VM

Nome da extensão Description
Extensão de script personalizado para Windows Executar scripts contra uma máquina virtual Azure.
Extensão DSC para Windows Aplique as configurações de estado desejadas powerShell numa máquina virtual.
Extensão do Diagnóstico do Azure Gerir o Azure Diagnostics.
Extensão VMAccess Gerir utilizadores e credenciais.

Passos seguintes

Para obter mais informações sobre extensões VM, consulte extensões e funcionalidades da máquina virtual Azure.