Información general sobre la configuración de estado deseado para ingenierosDesired State Configuration Overview for Engineers

Este documento está pensado para que los equipos de operaciones y desarrolladores comprendan los beneficios de la configuración de estado deseado (DSC) de PowerShell.This document is intended for developer and operations teams to understand the benefits of PowerShell Desired State Configuration (DSC). Para una vista de nivel superior del valor que ofrece DSC, consulte Información general sobre la configuración de estado deseado para responsables de toma de decisionesFor a higher level view of the value DSC provides, please see Desired State Configuration Overview for Decision Makers

Beneficios de la configuración de estado deseadoBenefits of Desired State Configuration

DSC existe para:DSC exists to:

  • Disminuir la complejidad del scripting en WindowsDecrease the complexity of scripting in Windows
  • Aumentar la velocidad de la iteraciónIncrease the speed of iteration

El concepto de "implementación continua" es cada vez más importante.The concept of "continuous deployment" is becoming more important. La implementación continua se refiere a la capacidad de realizar implementaciones con frecuencia, potencialmente muchas veces al día.Continuous deployment means the ability to deploy frequently, potentially many times per day. El propósito de estas implementaciones no es corregir algo, sino publicar rápidamente algún contenido.The purpose of these deployments are not to fix something but to get something published quickly. Al obtener características nuevas durante todo el desarrollo y hasta la operación de la manera más fluida y confiable posible, puede disminuir el tiempo para recuperar la inversión de la nueva lógica de negocios.By getting new features through development into operation as smoothly and reliably as possible, you reduce time-to-value of new business logic.

La migración hacia la informática en la nube implica una solución de implementación que use un modelo de plantilla "declarativa", donde se declare un entorno de estado final como texto y se publique en un motor de implementación.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. Esta técnica de implementación permite realizar un cambio rápido, a gran escala, que resista la amenaza de errores, porque en cualquier momento la implementación se puede repetir de manera coherente para garantizar un 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. La creación de las herramientas y los servicios que admiten este estilo de operaciones mediante la automatización es una respuesta a estos cambios.The creation of tools and services that support this style of operations through automation is a response to these changes.

DSC es una plataforma que ofrece implementación, configuración y cumplimiento declarativos e idempotentes (repetibles).DSC is a platform that provides declarative and idempotent (repeatable) deployment, configuration and conformance. La plataforma de DSC le permite asegurarse de que los componentes del centro de datos tienen la configuración correcta, lo que permite evitar errores y previene costosas fallas en la implementación.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. Si las configuraciones de DSC se tratan como parte del código de la aplicación, DSC permite la implementación continua.By treating DSC configurations as part of application code, DSC enables continuous deployment. La configuración de DSC se debe actualizar como parte de la aplicación, lo que garantiza que el conocimiento necesario para implementar la aplicación siempre esté actualizado y listo para usar.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.

"Ya tengo PowerShell. ¿Por qué necesito la configuración de estado deseado?""I have PowerShell, why do I need Desired State Configuration?"

La configuración de DSC separa la intención ("lo que quiero hacer") de la ejecución ("cómo quiero hacerlo").DSC configurations separate intent, or "what I want to do", from execution, or "how I want to do it." Esto significa que la lógica de ejecución está contenida en los recursos.This means the logic of execution is contained within the resources. No es necesario que los usuarios sepan cómo implementar una característica si hay disponible un recurso de DSC para esa característica.Users do not have to know how to implement or deploy a feature when a DSC resource for that feature is available. Esto permite que el usuario se centre en la estructura de la implementación.This allows the user to focus on the structure of their deployment.

Como ejemplo, los scripts de PowerShell deben verse similares al siguiente: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

Este script es simple, entendible y sencillo.This script is simple, comprehensible, and straightforward. Sin embargo, si intenta poner ese script en el entorno de producción, se encontrará con varios problemas.However, if you try putting that script into production, you will run into several issues. ¿Qué sucede si el script se ejecuta dos veces seguidas?What happens if that script is run twice in a row? ¿Qué pasa sin Antonio tenía anteriormente acceso completo al recurso compartido?What happens if Bob previously had Full Access to the share?

Para compensar por estos problemas, una versión "real" del script se verá un poco más similar a lo siguiente: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
    }
}

Este script es más complejo, con un importante control de errores y lógica.This script is more complex, with plenty of logic and error handling. El script es más complejo porque ya no indica lo que desea hacer, sino cómo hacerlo .The script is more complex because you are no longer stating what you want done, but how to do it .

DSC le permite indicar qué es lo que quiere que se haga y la lógica subyacente se abstrae.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  = "Bob"
          FullAccess  = "Alice"
          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

El script tiene un formato limpio y es fácil de leer.This script is cleanly formatted and straightforward to read. El control de errores y las rutas lógicas siguen presentes en la implementación de recursos, pero son invisibles para el autor del script.The logic paths and error handling are still present in the resource implementation, but invisible to the script author.

Separación del entorno de la estructuraSeparating Environment from Structure

Un patrón común en DevOps es tener varios entornos para la implementación.A common pattern in DevOps is to have multiple environments for deployment. Por ejemplo, es posible que haya un entorno "dev" (desarrollo) que se usa para crear un prototipo de código nuevo.For example, there might be a "dev" environment used to quickly prototype new code. El código del entorno "dev" (desarrollo) pasa a un entorno "test" (prueba), en el que otras personas comprueban la funcionalidad nueva.The code from the "dev" environment goes into a "test" environment, where other people verify the new functionality. Finalmente, el código pasa a "prod" (producción), el entorno de producción del sitio activo.Finally, the code goes into "prod", or the live site production environment.

Las configuraciones de DSC adaptan esta canalización de dev-test-prod a través del uso de los datos de configuración.DSC configurations accommodate this dev-test-prod pipeline through the use of configuration data. Esto abstrae aún más la diferencia entre la estructura de la configuración de los nodos que se administran.This further abstracts the difference between the structure of the configuration from the nodes that are managed. Por ejemplo, puede definir una configuración que requiere un servidor SQL Server, un servidor IIS y un servidor de nivel intermedio.For example, you can define a configuration that requires a SQL server, an IIS server, and a middle-tier server. Independientemente de cuáles son los nodos que reciben las distintas partes de esta configuración, siempre existirán estos tres elementos.Regardless of what nodes receive the different pieces of this configuration, those three elements will always be present. Puede usar los datos de configuración para apuntar los tres elementos a la misma máquina en un entorno de desarrollo, separarlos a tres máquinas distintas en un entorno de prueba y, por último, a todos los servidores de producción del entorno de producción.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 implementar los distintos entornos, puede invocar Start-DscConfiguration con los datos de configuración correctos correspondientes al entorno que desea tener como 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 tambiénSee Also

ConfiguracionesConfigurations

Datos de configuraciónConfiguration Data

RecursosResources