Visão Geral da Configuração de Estado Desejado para EngenheirosDesired State Configuration Overview for Engineers

Elaboramos este documento para que as equipes de operações e os desenvolvedores possam compreender os benefícios da DSC (Configuração de Estado Desejado) do PowerShell.This document is intended for developer and operations teams to understand the benefits of PowerShell Desired State Configuration (DSC). Para obter uma ideia mais abrangente do valor que a DSC fornece, confira o tópico Visão Geral da Configuração de Estado Desejado para Tomadores de DecisãoFor a higher level view of the value DSC provides, please see Desired State Configuration Overview for Decision Makers

Benefícios da Configuração de Estado DesejadoBenefits of Desired State Configuration

A DSC existe para:DSC exists to:

  • Diminuir a complexidade da criação de scripts no WindowsDecrease the complexity of scripting in Windows
  • Aumentar a velocidade de iteraçãoIncrease the speed of iteration

O conceito de "implantação contínua" está se tornando mais importante.The concept of "continuous deployment" is becoming more important. Implantação contínua significa a capacidade de implantar com frequência, possivelmente, várias vezes por dia.Continuous deployment means the ability to deploy frequently, potentially many times per day. A finalidade dessas implantações não é corrigir algo, mas sim publicar conteúdo rapidamente.The purpose of these deployments are not to fix something but to get something published quickly. Ao lançar novos recursos do desenvolvimento para as operações da forma mais tranquila e confiável possível, você aumenta o rendimento da nova lógica de negócios.By getting new features through development into operation as smoothly and reliably as possible, you reduce time-to-value of new business logic.

A mudança para computação na nuvem implica uma solução de implantação que utiliza um modelo "declarativo", no qual um ambiente de estado final é declarado como texto e publicado em um mecanismo de implantação.The move towards cloud computing implies a deployment solution that utilizes a "declarative" template model, where an end state environment is declared as text and published to a deployment engine. Essa técnica de implantação permite uma alteração rápida, em grande escala, com resiliência contra ameaças de falha, pois a qualquer momento a implantação pode ser repetida consistentemente a fim de garantir um estado final.This deployment technique allows for rapid change, at scale, with resilience against threat of failure because at any time the deployment can be consistently repeated to guarantee an end state. A criação de ferramentas e serviços que oferecem suporte a esse estilo de operações por meio da automação é uma resposta a essas alterações.The creation of tools and services that support this style of operations through automation is a response to these changes.

DSC é uma plataforma que fornece implantação, configuração e conformidade declarativas e idempotentes (repetível).DSC is a platform that provides declarative and idempotent (repeatable) deployment, configuration and conformance. Na plataforma DSC, você garante que os componentes do datacenter tenham a configuração correta, evitando erros e falhas de implantação dispendiosas.The DSC platform enables you to ensure that the components of your data center have the correct configuration, which avoids errors and prevents costly deployment failures. A DSC permite a implantação contínua, tratando as configurações DSC como parte do código do aplicativo.By treating DSC configurations as part of application code, DSC enables continuous deployment. A configuração DSC deve ser atualizada como parte do aplicativo, garantindo que o conhecimento necessário para implantá-lo esteja sempre atualizado e pronto para uso.The DSC configuration should be updated as a part of the application, ensuring that the knowledge needed to deploy the application is always up-to-date and ready to be used.

"Eu tenho o PowerShell, por que preciso da Configuração de Estado Desejado?""I have PowerShell, why do I need Desired State Configuration?"

As configurações DSC separam finalidade (ou seja, "o que eu quero fazer") de execução (isto é, "de que maneira eu quero fazê-lo").DSC configurations separate intent, or "what I want to do", from execution, or "how I want to do it." Isso significa que a lógica de execução está incluída nos recursos.This means the logic of execution is contained within the resources. Os usuários não precisam saber como implementar ou implantar um recurso quando um recurso DSC para este recurso está disponível.Users do not have to know how to implement or deploy a feature when a DSC resource for that feature is available. Dessa forma, os usuários podem se concentrar na estrutura da implantação deles.This allows the user to focus on the structure of their deployment.

Por exemplo, os scripts do PowerShell devem ter a seguinte aparência:As an example, PowerShell scripts should look like this:

# Create a share in Windows Server 8
New-SmbShare -Name MyShare -Path C:\Demo\Temp -FullAccess Alice -ReadAccess Bob

Esse script é fácil, simples e direto.This script is simple, comprehensible, and straightforward. No entanto, se tentar colocar o script em produção, você enfrentará vários problemas.However, if you try putting that script into production, you will run into several issues. O que acontece se o script for executado duas vezes seguidas?What happens if that script is run twice in a row? O que acontece se Diogo já tinha acesso completo ao compartilhamento?What happens if Bob previously had Full Access to the share?

Para compensar esses problemas, uma versão "real" do script será mais parecida com a seguinte:To compensate for these issues, a "real" version of the script will look closer to something like:

# But actually creating a share in an idempotent way would be

$shareExists = $false
$smbShare = Get-SmbShare -Name $Name -ErrorAction SilentlyContinue
if($smbShare -ne $null)
{
    Write-Verbose -Message "Share with name $Name exists"
    $shareExists = $true
}

if ($shareExists -eq $false)
{
    Write-Verbose "Creating share $Name to ensure it is Present"
    New-SmbShare @psboundparameters
}
else
{
    # Need to call either Set-SmbShare or *ShareAccess cmdlets
    if ($psboundparameters.ContainsKey("ChangeAccess"))
    {
       #...etc, etc, etc
    }
}

Esse script é mais complexo, com muita lógica e tratamento de erros.This script is more complex, with plenty of logic and error handling. O script é mais complexo porque você não informa mais o que pretende fazer, e sim como fazê-lo.The script is more complex because you are no longer stating what you want done, but how to do it.

Na DSC, você pode informar o que pretende fazer e a lógica subjacente é simplificada.DSC allows you to say what you want done, and the underlying logic is abstracted away.

# A configuration is a special kind of PowerShell function
Configuration Sample_Share
{
   Import-DscResource -Module xSmbShare
   # Nodes are the endpoint we wish to configure
   # A Configuration block can have zero or more Node blocks
   Node $NodeName
   {
      # Next, specify one or more resource blocks
      # Resources are simply PowerShell modules that
      # implement the logic of "how" to execute a task
      xSmbShare MySMBShare
      {
          Ensure      = "Present" 
          Name        = "MyShare"
          Path        = "C:\Demo\Temp"  
          ReadAccess  = "Alice"
          FullAccess  = "Bob"
          Description = "This is an updated description for this share"
      }
   }
} 
#Run the function to compile the configuration
Sample_Share
#Pass the configuration to the nodes we defined and configure them
Start-DscConfiguration Sample_Share

Este script tem um formato simples e é fácil de ler.This script is cleanly formatted and straightforward to read. Os caminhos lógicos e o tratamento de erros continuam presentes na implementação resource, embora sejam invisíveis para o autor do script.The logic paths and error handling are still present in the resource implementation, but invisible to the script author.

Separando ambiente de estruturaSeparating Environment from Structure

Um padrão comum na DevOps é usar vários ambientes de implantação.A common pattern in DevOps is to have multiple environments for deployment. Por exemplo, pode haver um ambiente de "desenvolvimento" para criar o protótipo de um novo código rapidamente.For example, there might be a "dev" environment used to quickly prototype new code. O código do ambiente de "desenvolvimento" passa por um ambiente de "teste", no qual outras pessoas verificam a funcionalidade.The code from the "dev" environment goes into a "test" environment, where other people verify the new functionality. Por fim, o código passa para a "produção" ou o ambiente de produção de site ativo.Finally, the code goes into "prod", or the live site production environment.

As configurações de DSC acomodam esse pipeline de desenvolvimento/teste/produção, por meio do uso de dados da configuração.DSC configurations accommodate this dev-test-prod pipeline through the use of configuration data. Isso simplifica ainda mais a diferença entre a estrutura da configuração e os nós gerenciados.This further abstracts the difference between the structure of the configuration from the nodes that are managed. Por exemplo, você pode definir uma configuração que requer um SQL Server, um Servidor IIS e um servidor de camada intermediária.For example, you can define a configuration that requires a SQL server, an IIS server, and a middle-tier server. Independentemente de quais nós recebem as diferentes partes dessa configuração, esses três elementos estarão sempre presentes.Regardless of what nodes receive the different pieces of this configuration, those three elements will always be present. Você pode usar dados de configuração para apontar todos os três elementos para o mesmo computador em um ambiente de desenvolvimento, separar os três elementos para três computadores diferentes em um ambiente de teste e, por fim, apontá-los para todos os servidores de produção no ambiente de produção.You can use configuration data to point all three elements towards the same machine for a dev environment, separate out the three elements to three different machines for a test environment, and finally towards all your production servers for the prod environment. Para implantar em diferentes ambientes, você pode invocar Start-DscConfiguration com os dados de configuração corretos para o ambiente de destino.To deploy to the different environments, you can invoke Start-DscConfiguration with the correct configuration data for the environment you want to target.

Consulte TambémSee Also

ConfiguraçõesConfigurations

Dados da ConfiguraçãoConfiguration Data

RecursosResources