Panoramica di DSC (Desired State Configuration) per tecniciDesired State Configuration Overview for Engineers

In questo documento è destinato ai team di sviluppatori e tecnici operativi per illustrare i vantaggi di PowerShell DSC (Desired State Configuration).This document is intended for developer and operations teams to understand the benefits of PowerShell Desired State Configuration (DSC). Per una panoramica di più alto livello del valore offerto da DSC, vedere Panoramica di DSC (Desired State Configuration) per decision maker.For a higher level view of the value DSC provides, please see Desired State Configuration Overview for Decision Makers

Vantaggi dell'uso di DSCBenefits of Desired State Configuration

DSC offre i vantaggi seguenti:DSC exists to:

  • Ridurre la complessità dello scripting in WindowsDecrease the complexity of scripting in Windows
  • Aumentare la velocità di iterazioneIncrease the speed of iteration

Il concetto di "distribuzione continua" è sempre più importante.The concept of "continuous deployment" is becoming more important. La distribuzione continua implica la possibilità di distribuire in modo frequente, potenzialmente più volte al giorno.Continuous deployment means the ability to deploy frequently, potentially many times per day. Lo scopo di queste distribuzioni non è quello di correggere un problema, ma di pubblicare funzionalità in tempi brevi.The purpose of these deployments are not to fix something but to get something published quickly. Permettendo alle nuove funzionalità di passare dalla fase di sviluppo a quella operativa nel modo più rapido e affidabile possibile, si accelera il time-to-value della nuova logica di business.By getting new features through development into operation as smoothly and reliably as possible, you reduce time-to-value of new business logic.

La transizione verso il cloud computing implica una soluzione di distribuzione che utilizza un tipo di modello "dichiarativo", dove un ambiente di stato finale viene dichiarato come testo e pubblicato in un motore di distribuzione.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. Questa tecnica di distribuzione consente cambiamenti rapidi su larga scala, con resilienza da rischi di errore perché in qualsiasi momento la distribuzione può essere ripetuta in modo coerente per garantire uno stato finale.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 creazione di strumenti e servizi che supportano questo tipo di operazioni tramite l'automazione è una risposta a queste modifiche.The creation of tools and services that support this style of operations through automation is a response to these changes.

DSC è una piattaforma che offre funzionalità di distribuzione, configurazione e conformità dichiarative e idempotenti (ripetibili).DSC is a platform that provides declarative and idempotent (repeatable) deployment, configuration and conformance. La piattaforma DSC consente di verificare che i componenti del data center siano configurati correttamente, in modo da evitare errori e impedire costosi problemi di distribuzione.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. Trattando le configurazioni DSC come parte del codice dell'applicazione, DSC consente la distribuzione continua.By treating DSC configurations as part of application code, DSC enables continuous deployment. La configurazione DSC deve essere aggiornata come parte dell'applicazione, assicurando così che le informazioni necessarie per distribuire l'applicazione siano sempre aggiornate e pronte per l'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.

"Se si ha PowerShell, perché è necessario usare anche Desired State Configuration?""I have PowerShell, why do I need Desired State Configuration?"

Le configurazioni DSC fanno distinzione tra l'intenzione, ossia "l'operazione che si vuole eseguire", e l'esecuzione, ossia "il modo in cui eseguire tale operazione".DSC configurations separate intent, or "what I want to do", from execution, or "how I want to do it." Ciò significa che la logica di esecuzione è contenuta all'interno delle risorse.This means the logic of execution is contained within the resources. Gli utenti non devono sapere come implementare o distribuire una funzionalità quando è disponibile una risorsa DSC per tale funzionalità.Users do not have to know how to implement or deploy a feature when a DSC resource for that feature is available. In questo modo, gli utenti possono concentrarsi sulla struttura della loro distribuzione.This allows the user to focus on the structure of their deployment.

Ad esempio, gli script di PowerShell dovrebbero avere un aspetto simile al seguente: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

Questo script è semplice e immediatamente comprensibile.This script is simple, comprehensible, and straightforward. Se tuttavia si prova a trasferirlo nell'ambiente di produzione, possono verificarsi diversi problemi.However, if you try putting that script into production, you will run into several issues. Cosa accade se lo script viene eseguito due volte di seguito?What happens if that script is run twice in a row? E se un utente aveva l'accesso completo alla condivisione?What happens if Bob previously had Full Access to the share?

Per ovviare a questi problemi, una versione "reale" dello script avrà un aspetto più vicino al seguente: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
    }
}

Questo script è più complesso, con molte istruzioni per la gestione della logica e degli errori.This script is more complex, with plenty of logic and error handling. Lo script è più complesso perché non indica più le operazioni da eseguire, ma in che modo eseguirle .The script is more complex because you are no longer stating what you want done, but how to do it .

DSC consente di specificare le operazioni da eseguire ed è in grado di astrarre la logica sottostante.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

Questo script è formattato correttamente ed è facilmente leggibile.This script is cleanly formatted and straightforward to read. I percorsi di logica e i criteri di gestione degli errori sono ancora presenti nell'implementazione della risorsa, ma non sono visibili all'autore dello script.The logic paths and error handling are still present in the resource implementation, but invisible to the script author.

Separazione dell'ambiente dalla strutturaSeparating Environment from Structure

Un modello comune in DevOps consiste nella presenza di più ambienti per la distribuzione.A common pattern in DevOps is to have multiple environments for deployment. Ad esempio, può essere presente un ambiente di sviluppo che consente di creare rapidamente prototipi di nuovo codice.For example, there might be a "dev" environment used to quickly prototype new code. Il codice dell'ambiente di sviluppo viene trasferito in un ambiente di test, in cui altri utenti verificano la nuova funzionalità.The code from the "dev" environment goes into a "test" environment, where other people verify the new functionality. Infine, il codice passa all'ambiente di produzione, ossia all'ambiente del sito attivo.Finally, the code goes into "prod", or the live site production environment.

Le configurazioni DSC supportano questa pipeline sviluppo-test-produzione tramite l'uso di dati di configurazione.DSC configurations accommodate this dev-test-prod pipeline through the use of configuration data. Questa caratteristica ha l'effetto di astrarre maggiormente la differenza tra la struttura della configurazione e i nodi gestiti.This further abstracts the difference between the structure of the configuration from the nodes that are managed. È ad esempio possibile definire una configurazione che richiede un server SQL, un server IIS e un server di livello intermedio.For example, you can define a configuration that requires a SQL server, an IIS server, and a middle-tier server. Indipendentemente dai nodi che ricevono le diverse parti della configurazione, questi tre elementi saranno sempre presenti.Regardless of what nodes receive the different pieces of this configuration, those three elements will always be present. È possibile usare i dati di configurazione per far puntare tutti e tre gli elementi allo stesso computer per un ambiente di sviluppo, separare i tre elementi su tre computer diversi per un ambiente di test e infine farli puntare a tutti i server di produzione per l'ambiente di produzione.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. Per la distribuzione nei diversi ambienti, è possibile richiamare Start-DscConfiguration con i dati di configurazione corretti per l'ambiente di destinazione.To deploy to the different environments, you can invoke Start-DscConfiguration with the correct configuration data for the environment you want to target.

Vedere ancheSee Also

ConfigurazioniConfigurations

Dati di configurazioneConfiguration Data

RisorseResources