Utilizar o DSC do PowerShell para obter um estado pretendido

Concluído

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

No final desta unidade, vai:

  • Compreender os blocos de nós e de configuração.
  • Compreender os recursos das credenciais.
  • Escrever código do DSC do PowerShell para instalar o Microsoft IIS de forma idempotente.

Recursos do DSC

Você viu que o DSC do PowerShell é uma linguagem de script declarativa. A programação declarativa se concentra no resultado, não na jornada. Quando precisar de configurar e de implementar um recurso do Azure de forma consistente num conjunto de VMs, o DSC do PowerShell poderá ser útil. Pode utilizar o DSC do PowerShell mesmo que não esteja familiarizado com os passos técnicos da instalação e da configuração de software e serviços.

O Windows Server tem um conjunto de recursos incorporados do DSC do PowerShell. Você pode exibir esses recursos executando o Get-DSCResource cmdlet do PowerShell.

Get-DscResource | select Name,Module,Properties

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

Recurso Description
Ficheiro Gere ficheiros e pastas num nó
Arquivo Descomprime um arquivo no formato. zip
Environment Gere as variáveis de ambiente do sistema
Registo Escreve uma mensagem no registo de eventos do DSC
Pacote Instala ou remove um pacote
Registo Gere a chave do registo de um nó (exceto os Utilizadores HKEY)
Script Executa comandos do PowerShell num nó
Serviço Gere os serviços Windows
User Gere utilizadores locais num nó
WindowsFeature Adiciona ou remove uma função/funcionalidade num nó
WindowsOptionalFeature Adiciona ou remove uma função/funcionalidade opcional num nó
WindowsProcess Gere um processo do Windows

Para recursos mais complexos, como a integração com o Ative Directory, use o DSC Resource Kit, que é atualizado mensalmente. Você pode encontrar um link para o DSC Resource Kit na unidade Resumo no final deste módulo.

O recurso que quer configurar já tem de fazer parte da VM ou parte da imagem da VM. Caso contrário, o trabalho não será compilado e executado.

Anatomia de um bloco de código DSC

Um bloco de código DSC contém quatro secções. Utilize o exemplo a seguir para obter uma visão mais detalhada. 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 que se segue.

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 secções:

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

    O bloco de configuração descreve a configuração pretendida. Pense num bloco de configuração como uma função, exceto pelo facto de esta conter uma descrição dos recursos a instalar em vez do código para os instalar.

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

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. : Você pode ter um ou mais blocos de nós. O bloco de nós determina os nomes dos ficheiros .mof que são gerados quando 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. Gera vários ficheiros .mof quando utiliza vários nomes de nó.

    Utilize a notação de matriz no bloco de nós para visar vários anfitriões. Por exemplo:

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

  4. MyDscConfiguration: Esta chamada invoca o MyDscConfiguration bloco. É como executar uma função. Quando executa um bloco de configuração, este é compilado num documento MOF (Managed Object Format). O formato MOF é uma linguagem compilada criada pelo Desktop Management Task Force, baseada na linguagem IDL.

    Para cada nó listado no script do DSC, é criado um ficheiro .mof na pasta que especificou com o parâmetro -OutputPath.

Dados de configuração num script do DSC

Num bloco de dados de configuração, pode fornecer os dados que possam ser necessários para o processo de configuração. 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 tem de ter o nome AllNodes. Dentro da matriz AllNodes, vai especificar os dados para um nó através da variável NodeName.

Considerando o cenário anterior, vamos supor que, no servidor Web que está instalado em cada nó, quer definir a propriedade SiteName com valores diferentes. 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 as credenciais num script do DSC

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

As credenciais não são criptografadas em arquivos .mof por padrão; eles são expostos como texto simples. Para encriptar as credenciais, utilize um certificado nos dados de configuração. A chave privada do certificado tem de estar no nó onde quer aplicar a configuração. Os certificados são configurados pelo Gestor de Configuração Local (LCM) do nó.

A partir do PowerShell 5.1, os ficheiros .mof no nó são encriptados quando estão inativos. Em trânsito, todas as credenciais são encriptadas através do WinRM.

Emitir a configuração para um nó

Depois de criar um arquivo .mof compilado para uma configuração, você pode enviá-lo por push para um nó executando o Start-DscConfiguration cmdlet. Se adicionar o caminho ao diretório, será aplicado ao nó qualquer ficheiro .mof que encontre nesse diretório:

Start-DscConfiguration -path D:\

Este passo corresponde ao modo emissão, descrito na unidade anterior.

Solicitar a configuração dos nós

Se tiver centenas de VMs no Azure, o modo de extração será mais adequado do que o modo de emissão.

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

Antes de compilar sua configuração, importe para sua conta de automação todos os módulos do PowerShell de que o processo DSC precisa. Estes módulos definem como concluir a tarefa para alcançar o estado pretendido.

Por exemplo, um script do DSC na unidade anterior utilizou o módulo do PowerShell xSmbShare para informar o DSC como verificar o estado relativo a uma partilha de ficheiros. O DSC extrai automaticamente os módulos da conta de automação para o nó.

O diagrama a seguir mostra como configurar o State Configuration da Automatização do Azure. Vamos explorar melhor estes passos na próxima unidade.

Diagrama que mostra as etapas para configurar o DSC.

Por predefinição, após 15 minutos, o LCM na VM pesquisa a Automatização do Azure para verificar se existem alterações no ficheiro de configuração do DSC. Todas as alterações feitas nas VMs são registadas na configuração do estado pretendido. Se alterar uma configuração, poderá carregá-la para a conta de Automatização para reconfigurar automaticamente as VMs.

O diagrama a seguir mostra o processo do LCM para gerir o estado pretendido na VM.

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

Sua conta de automação lida com as credenciais nativamente. Esta gestão reduz a complexidade de proteger e trabalhar com credenciais.