Usar a DSC do PowerShell para atingir um estado desejado
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:
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 { ... }
Nó: 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')
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 recursoWindowsFeature
aqui garante que o recurso do WindowsWeb-Server
esteja instalado.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.
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.
Sua conta de Automação lida com as credenciais nativamente. Esse gerenciamento reduz a complexidade de proteger e trabalhar com credenciais.