Usar a DSC do PowerShell para atingir um estado desejado

Concluído

Você pode usar a DSC do PowerShell para especificar o estado desejado de uma VM. Nesta unidade, você aprenderá mais sobre a DSC do PowerShell e como usá-la para controlar o estado de suas VMs. No cenário de exemplo, você usará a DSC do PowerShell para garantir que o IIS do Windows Server esteja instalado e configurado de forma consistente em todos os seus servidores Web.

Ao final desta unidade, você:

  • Entenderá o que são blocos de nó e de configuração.
  • Entenderá o que são ativos de credencial.
  • Escreverá código da DSC do PowerShell para instalar o IIS da Microsoft de forma idempotencial.

Recursos da DSC

Você viu que a DSC do PowerShell é uma linguagem de script declarativa. A programação declarativa se concentra no resultado, não na jornada. A DSC do PowerShell pode ajudar você a configurar e implantar um recurso do Azure de forma consistente em um conjunto de VMs. Você pode usar a DSC do PowerShell mesmo que não esteja familiarizado com as etapas técnicas necessárias para instalar e configurar o software e os serviços.

O Windows Server tem um conjunto de recursos internos da DSC do PowerShell. Para ver esses recursos, execute o cmdlet Get-DSCResource do PowerShell.

Get-DscResource | select Name,Module,Properties

A tabela a seguir lista alguns dos recursos internos da DSC do PowerShell.

Recurso Descrição
Arquivo Gerencia arquivos e pastas em um nó
Arquivo Morto Descompacta um arquivo morto no formato .zip
Ambiente Gerencia variáveis de ambiente do sistema
Log Grava uma mensagem no log de eventos da DSC
Pacote Instala ou remove um pacote
Registro Gerencia a chave do registro de um nó (exceto usuários de HKEY)
Script Executa comandos do PowerShell em um nó
Serviço Gerencia serviços do Windows
Usuário Gerencia usuários locais em um nó
WindowsFeature Adiciona ou remove uma função ou recurso de um nó
WindowsOptionalFeature Adiciona ou remove uma função ou recurso opcional de um nó
WindowsProcess Gerencia um processo do Windows

Para obter recursos mais complexos, como a integração do Active Directory, use o Kit de Recursos da DSC, que é atualizado mensalmente. Você encontrará um link para o Kit de Recursos da DSC na unidade Resumo, no final deste módulo.

O recurso que você deseja configurar já deve fazer parte da VM ou da imagem da VM. Caso contrário, o trabalho não será compilado e executado.

Anatomia de um bloco de código da DSC

Um bloco de código da DSC contém quatro seções. Use o exemplo a seguir para observar com mais detalhes. No exemplo, os números não fazem parte da sintaxe. Eles são indicados como comentários e se referem a seções na discussão a seguir.

Configuration MyDscConfiguration {              ##1
    Node "localhost" {                          ##2
        WindowsFeature MyFeatureInstance {      ##3
            Ensure = 'Present'
            Name = 'Web-Server'
        }
    }
}
MyDscConfiguration -OutputPath C:\temp\         ##4

A sintaxe de configuração inclui estas seções:

  1. Configuração: o bloco de configuração é um bloco de script mais externo. Ele começa com a palavra-chave Configuration, e você fornecerá um nome. Aqui, o nome da configuração é MyDscConfiguration.

    O bloco de configuração descreve a configuração desejada. Pense em um bloco de configuração como uma função, exceto pelo fato de que ele contém uma descrição dos recursos de instalação, em vez do código para instalá-los.

    Assim como uma função do PowerShell, um bloco de configuração pode aceitar parâmetros. Por exemplo, você pode parametrizar o nome do nó.

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. : você pode ter um ou mais blocos de nó. O bloco de nó determina os nomes dos arquivos .mof que são gerados quando você compila a configuração. Por exemplo, o nome localhost do nó gera apenas um arquivo localhost.mof, mas você pode enviar esse arquivo .mof para qualquer servidor. Diversos arquivos .mof podem são gerados ao usar múltiplos nomes de nós.

    Use a notação de matriz no bloco de nó para ter como destino diversos hosts. Por exemplo:

    Node @('WEBSERVER1', 'WEBSERVER2', 'WEBSERVER3')
    
  3. Recurso: Você pode usar um ou mais blocos de recursos para especificar os recursos a serem configurados. Nesse caso, um único bloco de recursos faz referência ao recurso WindowsFeature. O recurso WindowsFeature aqui garante que o recurso do Windows Web-Server esteja instalado.

  4. MyDscConfiguration: essa chamada invoca o bloco de MyDscConfiguration. É como executar uma função. Quando você executa um bloco de configuração, ele é compilado em um documento MOF (Managed Object Format). MOF é uma linguagem compilada criada pelo Desktop Management Task Force com base na linguagem IDL.

    Para cada nó listado no script da DSC, um arquivo .mof é criado na pasta especificada com o parâmetro -OutputPath.

Dados de configuração em um script da DSC

Em um bloco de dados de configuração, você pode fornecer os dados de que o processo de configuração venha a precisar. Você pode aplicar esses dados a nós nomeados ou aplicá-los globalmente em todos os nós.

Um bloco de dados de configuração é um bloco nomeado que contém uma matriz de nós. A matriz deve ser nomeada AllNodes. Dentro da matriz AllNodes, você especifica os dados de um nó usando a variável NodeName.

Usando o cenário anterior, digamos que, no servidor Web instalado em cada nó, você queira definir a propriedade SiteName para valores diferentes. Você pode definir um bloco de dados de configuração como este:

$datablock =
@{
    AllNodes =
    @(
        @{
            NodeName = "WEBSERVER1"
            SiteName = "WEBSERVER1-Site"
        },
        @{
            NodeName = "WEBSERVER2"
            SiteName = "WEBSERVER2-Site"
        },
        @{
            NodeName = "WEBSERVER3"
            SiteName = "WEBSERVER3-Site"
        }
    );
}

Se quiser definir uma propriedade com o mesmo valor em cada nó, especifique NodeName = "*" na matriz AllNodes.

Proteger credenciais em um script da DSC

Um script da DSC pode exigir informações de credenciais para o processo de configuração. Evite colocar uma credencial em texto não criptografado na sua ferramenta de gerenciamento de código-fonte. Em vez disso, as configurações de DSC na Automação do Azure podem fazer referência a credenciais armazenadas em um objeto PSCredential. Você pode definir um parâmetro para o script da DSC usando o tipo PSCredential. Antes de executar o script, obtenha as credenciais do usuário, use-as para criar um novo objeto PSCredential e passe esse objeto para o script como parâmetro.

As credenciais não são criptografadas em arquivos .mof por padrão; elas são expostas como texto não criptografado. Para criptografar credenciais, use um certificado em seus dados de configuração. A chave privada do certificado precisa estar no nó ao qual você deseja aplicar a configuração. Os certificados são configurados por meio do LCM do nó.

A partir do PowerShell 5.1, os arquivos .mof do nó são criptografados em repouso. Em trânsito, todas as credenciais são criptografadas usando WinRM.

Efetuar push da configuração para um nó

Depois de criar um arquivo .mof compilado para uma configuração, você pode efetuar push dele para um nó executando o cmdlet Start-DscConfiguration. Se você adicionar o caminho ao diretório, ele aplicará qualquer arquivo .mof encontrado nesse diretório ao nó:

Start-DscConfiguration -path D:\

Esta etapa corresponde ao modo de push, que você aprendeu na unidade anterior.

Efetuar pull da configuração para os nós

Se você tiver centenas de VMs no Azure, será mais apropriado usar o modo de pull do que o modo de push.

Você pode configurar uma conta de Automação do Azure para atuar como um serviço pull; basta carregar a configuração na conta de Automação e, em seguida, registrar suas VMs nessa conta.

Antes de compilar a configuração, importe para a sua conta da Automação os módulos do PowerShell necessários para o processo de DSC. Esses módulos definem como concluir a tarefa para atingir o estado desejado.

Por exemplo, um script da DSC na unidade anterior usava o módulo do PowerShell xSmbShare para informar à DSC como verificar o estado de um compartilhamento de arquivo. A DSC efetua pull automaticamente dos módulos da conta da Automação para o nó.

O diagrama a seguir mostra como configurar a State Configuration da Automação do Azure. Exploraremos melhor essas etapas na próxima unidade.

Diagrama que mostra as etapas para configurar a DSC.

Por padrão, após 15 minutos, o LCM na VM sonda a Automação do Azure para verificar se há alterações no arquivo de configuração da DSC. Quaisquer alterações nas VMs são registradas na configuração de estado desejada. Se você alterar uma configuração, poderá carregá-la na conta de automação para reconfigurar automaticamente as VMs.

O diagrama a seguir mostra o processo do LCM para gerenciar o estado desejado na VM.

Diagrama que mostra como a VM controla a Automação do Azure.

Sua conta de Automação lida com as credenciais nativamente. Esse gerenciamento reduz a complexidade de proteger e trabalhar com credenciais.