Configuração de estado da Automação do Azure para planejamento da migração da configuração de computador

A configuração de computador é a implementação mais recente da funcionalidade que foi fornecida pela State Configuration da Automação do Azure (também conhecida como Desired State Configuration da Automação do Azure, ou AADSC). Quando possível, você deve planejar mover o conteúdo e os computadores para o novo serviço. Este artigo fornece diretrizes sobre como desenvolver uma estratégia de migração da Automação do Azure para a configuração de computador.

Os novos recursos de configuração de máquina abordam as solicitações de clientes:

  • Aumento do limite de tamanho para configurações até 100 MB
  • Relatórios avançados por meio do Azure Resource Graph incluindo o estado e a ID do recurso
  • Gerenciar várias configurações para o mesmo computador
  • Quando os computadores se desviam do estado desejado, você controla quando ocorre a correção
  • Linux e Windows consomem recursos DSC baseados no PowerShell

Antes de começar, é uma boa ideia ler as informações da visão geral conceitual na página Configuração de computador do Azure Policy.

Entender a migração

A melhor abordagem para a migração é reimplantar o conteúdo primeiro e, em seguida, migrar os computadores. Esta seção descreve as etapas esperadas para a migração.

  1. Exportar configurações da Automação do Azure
  2. Descobrir os requisitos dos módulos e carregá-los em seu ambiente
  3. Compilar configurações
  4. Criar e publicar pacotes de configuração de computador
  5. Testar pacotes de configuração de computador
  6. Integrar computadores híbridos ao Azure Arc
  7. Cancelar o registro dos servidores do State Configuration da Automação do Azure
  8. Atribuir configurações a servidores usando a configuração de computador

A configuração de computador usa a DSC versão 3 com o PowerShell versão 7. O DSC versão 3 pode coexistir com versões mais antigas do DSC no Windows e no Linux. As implementações são separadas. No entanto, não há detecção de conflitos.

A configuração de computador não exige a publicação de módulos ou configurações em um serviço nem a compilação em um serviço. Em vez disso, você desenvolve e testa o conteúdo usando ferramentas criadas para fins específicos e o publica em qualquer lugar que o computador possa acessar por HTTPS (de modo geral o Armazenamento de Blobs do Azure).

Se decidir ter máquinas em ambos os serviços por algum tempo, você não irá se deparar com obstáculos técnicos. Os dois serviços são independentes.

Exportar conteúdo da Automação do Azure

Comece descobrindo e exportando conteúdo do State Configuration da Automação do Azure para um ambiente de desenvolvimento no qual você cria, testa e publica pacotes de conteúdo para configuração de máquina.

Configurações

Você só pode exportar os scripts de configuração da Automação do Azure. Não é possível exportar configurações de nó nem arquivos MOF compilados. Se tiver publicado arquivos MOF diretamente na Conta de Automação e não tiver mais acesso ao arquivo original, você precisará recompilar a partir dos scripts de configuração privados. Se não conseguir encontrar a configuração original, você precisará recriá-la.

Para exportar scripts de configuração da Automação do Azure, primeiro identifique a conta da Automação do Azure que tem as configurações e o nome do Grupo de Recursos no qual a Conta de Automação está implantada.

Instale o módulo Az.Automation do PowerShell.

Install-Module -Name Az.Automation

Em seguida, use o comando Get-AzAutomationAccount para identificar as Contas de Automação e o Grupo de Recursos onde estão implantadas. As propriedades ResourceGroupName e AutomationAccountName são importantes para as próximas etapas.

Get-AzAutomationAccount
SubscriptionId        : <your-subscription-id>
ResourceGroupName     : <your-resource-group-name>
AutomationAccountName : <your-automation-account-name>
Location              : centralus
State                 :
Plan                  :
CreationTime          : 6/30/2021 11:56:17 AM -05:00
LastModifiedTime      : 6/30/2021 11:56:17 AM -05:00
LastModifiedBy        :
Tags                  : {}

Descubra as configurações na Conta de Automação. A saída tem uma entrada de dados por configuração. Se você tiver muitas, armazene as informações como uma variável para que seja mais fácil trabalhar com ela.

$getParams = @{
    ResourceGroupName     = '<your-resource-group-name>'
    AutomationAccountName = '<your-automation-account-name>'
}

Get-AzAutomationDscConfiguration @getParams
ResourceGroupName     : <your-resource-group-name>
AutomationAccountName : <your-automation-account-name>
Location              : centralus
State                 : Published
Name                  : <your-configuration-name>
Tags                  : {}
CreationTime          : 6/30/2021 12:18:26 PM -05:00
LastModifiedTime      : 6/30/2021 12:18:26 PM -05:00
Description           :
Parameters            : {}
LogVerbose            : False

Por fim, exporte cada configuração para um arquivo de script local usando o comandoExport-AzAutomationDscConfiguration. O nome do arquivo resultante usa o padrão \ConfigurationName.ps1.

$exportParams = @{
    OutputFolder          = '<location-on-your-machine>'
    ResourceGroupName     = '<your-resource-group-name>'
    AutomationAccountName = '<your-automation-account-name>'
    Name                  = '<your-configuration-name>'
}
Export-AzAutomationDscConfiguration @exportParams
UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
                                               12/31/1600 18:09

Exportar as configurações usando o pipeline do PowerShell

Depois de descobrir as contas e o número de configurações, talvez você queira exportar todas as configurações para uma pasta local no computador. Para automatizar esse processo, conduza a saída de cada comando dos exemplos anteriores para o próximo comando.

O exemplo exporta cinco configurações. O padrão de saída é o único indicador de sucesso.

Get-AzAutomationAccount |
    Get-AzAutomationDscConfiguration |
    Export-AzAutomationDSCConfiguration -OutputFolder <location on your machine>
UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09

Considere decompor arquivos de configuração complexos

A configuração de máquina pode gerenciar mais de uma configuração por computador. Muitas configurações escritas para o State Configuration da Automação do Azure presumiam a limitação do gerenciamento de uma única configuração por computador. Para aproveitar os recursos expandidos oferecidos pela configuração de máquina, os arquivos de configuração grandes podem ser divididos em muitas configurações menores em que cada uma lida com um cenário específico.

Não há orquestração na configuração de computador para controlar a ordem de classificação das configurações. Mantenha as etapas em uma configuração em conjunto em um pacote se elas precisarem ocorrer sequencialmente.

Módulos

Não é possível exportar módulos da Automação do Azure ou correlacionar automaticamente quais configurações exigem quais módulos e versões. Você precisa ter os módulos no ambiente local para criar um pacote de configuração de computador. Para criar uma lista de módulos necessários para a migração, use o PowerShell para consultar a Automação do Azure em relação ao nome e versão dos módulos.

Se estiver usando módulos que tenham sido criados de forma personalizada e existem apenas no seu ambiente de desenvolvimento privado, não será possível exportá-los da Automação do Azure.

Se não conseguir encontrar no seu ambiente e na conta um módulo personalizado necessário para uma configuração, você não poderá compilar a configuração. Portanto, não poderá migrar a configuração.

Listar módulos importados da Automação do Azure

Para recuperar uma lista de todos os módulos instalados na conta de automação, use o comando Get-AzAutomationModule. A propriedade IsGlobal informa se o módulo é sempre integrado à Automação do Azure ou se foi publicado para a conta.

Por exemplo, para criar uma lista de todos os módulos publicados em qualquer uma das contas.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $false

Você também pode usar a Galeria do PowerShell como auxílio para encontrar detalhes sobre os módulos que estão disponíveis publicamente. O exemplo a seguir lista os módulos que são integrados às novas Contas de Automação e contêm recursos de DSC.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $true |
    Find-Module -ErrorAction SilentlyContinue |
    Where-Object {'' -ne $_.Includes.DscResource} |
    Select-Object -Property Name, Version -Unique |
    Format-Table -AutoSize
Name                       Version
----                       -------
AuditPolicyDsc             1.4.0
ComputerManagementDsc      8.4.0
PSDscResources             2.12.0
SecurityPolicyDsc          2.10.0
xDSCDomainjoin             1.2.23
xPowerShellExecutionPolicy 3.1.0.0
xRemoteDesktopAdmin        1.1.0.0

Se os módulos foram importados da Galeria do PowerShell, você poderá conduzir a saída de Find-Module diretamente para Install-Module. O fato de conduzir a saída entre comandos fornece uma solução para carregar um ambiente de desenvolvedor com todos os módulos que estão atualmente em uma Conta de Automação, se estiverem disponíveis na Galeria do PowerShell.

Você pode usar a mesma abordagem para efetuar pull de módulos de um feed NuGet personalizado se o feed estiver registrado no ambiente local como um Repositório PowerShellGet.

O comando Find-Module nesse exemplo não suprime os erros, o que significa que os módulos não encontrados na galeria retornarão uma mensagem de erro.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $false |
    Find-Module |
    Where-Object { '' -ne $_.Includes.DscResource } |
    Install-Module

Inspecionar scripts de configuração para requisitos de módulo

Se você tiver exportado scripts de configuração da Automação do Azure, também poderá revisar o conteúdo para obter detalhes sobre quais módulos são necessários para compilar cada configuração em um arquivo MOF. Essa abordagem só é necessária se você encontrar configurações nas Contas de Automação das quais os módulos tenham sido removidos. As configurações não seriam mais úteis para computadores, mas ainda podem estar na conta.

Na parte superior de cada arquivo, procure uma linha que inclua Import-DscResource. Esse comando só é aplicável dentro de uma configuração e é usado para carregar módulos no momento da compilação.

Por exemplo, a configuração WindowsIISServerConfig na Galeria do PowerShell contém as linhas que aparecem nesse exemplo.

configuration WindowsIISServerConfig
{

Import-DscResource -ModuleName @{ModuleName = 'xWebAdministration';ModuleVersion = '1.19.0.0'}
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'

A configuração requer que você tenha o módulo xWebAdministration versão “1.19.0.0” e o módulo PSDesiredStateConfiguration.

Testar o conteúdo na configuração de computador do Azure

Para avaliar se você pode usar o conteúdo do State Configuration da Automação do Azure com a configuração de máquina, siga o tutorial passo a passo na página Como criar artefatos de pacote de configuração de máquina personalizados.

Quando você chegar à etapa Criar uma configuração, o script de configuração que gera um arquivo MOF deverá ser um dos scripts exportados do State Configuration da Automação do Azure. Você deve ter os módulos necessários do PowerShell instalados no ambiente antes de compilar a configuração em um arquivo MOF e criar um pacote de configuração de computador.

E o que acontece se um módulo não funcionar com a configuração de máquina?

Alguns módulos podem ter problemas de compatibilidade com a configuração de máquina. Os problemas mais comuns estão relacionados ao .NET Framework versus .NET Core. Informações técnicas detalhadas estão disponíveis na página Diferenças entre o Windows PowerShell 5.1 e PowerShell 7.x.

Uma opção para resolver problemas de compatibilidade é executar comandos do Windows PowerShell de dentro de um módulo que foi importado para o PowerShell 7 executando powershell.exe. Você pode conferir uma amostra que usa essa técnica no repositório do Azure-Policy onde o módulo é usado para auditar o estado da Configuração DSC do Windows.

O exemplo também ilustra uma pequena prova de conceito.

# example function that could be loaded from module
function New-TaskResolvedInPWSH7 {
    # runs the fictitious command 'Get-myNotCompatibleCommand' in Windows PowerShell
    $compatObject = & powershell.exe -NoProfile -NonInteractive -Command {
        Get-myNotCompatibleCommand
    }
    # resulting object can be used in PowerShell 7
    return $compatObject
}

Preciso adicionar a propriedade “Reasons” para Get-TargetResource em todos os módulos que eu migrar?

Implementar a propriedade Reasons fornece uma experiência melhor ao exibir os resultados de uma atribuição de configuração no portal do Azure. Se o método Get em um módulo não incluir Reasons, a saída genérica será retornada com detalhes das propriedades retornadas pelo método Get. Portanto, é opcional para migração.

Virtuais

Depois de terminar de testar o conteúdo do State Configuration da Automação do Azure na configuração de computador, desenvolva um plano para migrar os computadores.

O State Configuration da Automação do Azure está disponível para máquinas virtuais no Azure e máquinas híbridas localizadas fora do Azure. Você deve planejar cada um desses cenários usando etapas diferentes.

VMs do Azure

As máquinas virtuais do Azure já têm um recurso no Azure, o que significa que elas estão prontas para atribuições de configurações de computador que as associam a uma configuração. As tarefas de alto nível para migrar máquinas virtuais do Azure são removê-las do State Configuration da Automação do Azure e, em seguida, atribuir configurações usando a configuração de computador.

Para remover um computador do State Configuration da Automação do Azure, siga as etapas na página Como remover uma configuração e um nó do State Configuration da Automação do Azure.

Para atribuir configurações usando a configuração de computador, siga as etapas nos inícios rápidos do Azure Policy, como Início Rápido: Criar uma atribuição de política para identificar recursos não compatíveis. Na etapa 6 ao selecionar uma definição de política, escolha a definição que aplica uma configuração que você migrou do State Configuration da Automação do Azure.

Computadores híbridos

Os computadores fora do Azure podem ser registrados no State Configuration da Automação do Azure, mas não têm um recurso de computador no Azure. O serviço Local Configuration Manager (LCM) dentro do computador se encarrega da conexão com a Automação do Azure. O registro do nó é gerenciado como um recurso no tipo de provedor da Automação do Azure.

Antes de remover um computador do State Configuration da Automação do Azure, integre cada nó como um servidor habilitado para Azure Arc. A integração ao Azure Arc cria um recurso de máquina no Azure para que o Azure Policy possa gerenciar o computador. O computador pode ser integrado ao Azure Arc a qualquer momento, mas você pode usar o State Configuration da Automação do Azure para automatizar o processo.

Solucionar problemas ao exportar conteúdo

Mais detalhes sobre problemas conhecidos são fornecidos nesta seção.

Exportar configurações resulta no caractere "\" no nome do arquivo

Ao usar o PowerShell no MacOS e no Linux, você poderá enfrentar problemas quando lidar com a saída de nomes de arquivo por meio da Export-AzAutomationDSCConfiguration.

Como alternativa, foi publicado um módulo no Galeria do PowerShell chamado AADSCConfigContent. O módulo tem apenas um comando, que exporta o conteúdo de uma configuração armazenada no Automação do Azure fazendo uma solicitação REST para o serviço.

Próximas etapas