Utiliser DSC PowerShell pour atteindre l’état souhaité

Effectué

Vous pouvez utiliser PowerShell DSC pour spécifier l’état souhaité d’une machine virtuelle. Dans cette unité, vous allez découvrir plus d’informations sur DSC PowerShell et sur la façon de l’utiliser pour contrôler l’état de vos machines virtuelles. Dans l’exemple de scénario, vous allez utiliser PowerShell DSC pour vous assurer que IIS pour Windows Server est installé et configuré de manière cohérente sur tous vos serveurs web.

À la fin de cette unité, vous serez en mesure de :

  • comprendre les blocs de nœuds et de configurations
  • comprendre les ressources d’informations d’identification
  • écrire du code DSC PowerShell pour installer Microsoft IIS de façon idempotente.

Ressources DSC

Vous avez vu que DSC PowerShell était un langage de script déclaratif. La programmation déclarative se concentre sur le résultat, pas sur le cheminement. Quand vous devez configurer et déployer une ressource Azure de façon cohérente sur un ensemble de machines virtuelles, DSC PowerShell peut vous aider. Vous utilisez DSC PowerShell même si vous n’êtes pas familiarisé avec les étapes techniques nécessaires à l’installation et à la configuration des logiciels et des services.

Windows Server a un ensemble de ressources DSC PowerShell intégrées. Vous pouvez voir ces ressources en exécutant l’applet de commande PowerShell Get-DSCResource.

Get-DscResource | select Name,Module,Properties

Le tableau suivant répertorie quelques-unes des ressources DSC PowerShell intégrées.

Ressource Description
Fichier Gère les fichiers et les dossiers sur un nœud
Archive Décompresse une archive au format. zip
Environnement Gère les variables d’environnement système
Journal Écrit un message dans le journal des événements DSC
Package Installe ou supprime un package
Registre Gère la clé de registre d’un nœud (à l’exception des utilisateurs HKEY)
Script Exécute des commandes PowerShell sur un nœud
Service Gère des services Windows
Utilisateur Gère les utilisateurs locaux sur un nœud
WindowsFeature Ajoute ou supprime un rôle ou une fonctionnalité sur un nœud
WindowsOptionalFeature Ajoute ou supprime un rôle facultatif ou une fonctionnalité facultative sur un nœud
WindowsProcess Gère un processus Windows

Pour les ressources plus complexes, comme l’intégration Active Directory, le kit de ressources DSC est mis à jour tous les mois. Un lien vers le kit de ressources DSC est disponible dans le récapitulatif à la fin de ce module.

La ressource à configurer doit déjà faire partie de la machine virtuelle ou de l’image de machine virtuelle. Sinon, le travail n’est ni compilé ni exécuté.

Anatomie d’un bloc de code DSC

Un bloc de code DSC contient quatre sections. Utilisez l’exemple suivant pour les examiner de plus près. Dans l’exemple, les nombres ne font pas partie de la syntaxe. Elles sont désignées comme des commentaires et font référence à des sections de la discussion qui suit.

Configuration MyDscConfiguration {              ##1
    Node "localhost" {                          ##2
        WindowsFeature MyFeatureInstance {      ##3
            Ensure = 'Present'
            Name = 'Web-Server'
        }
    }
}
MyDscConfiguration -OutputPath C:\temp\         ##4

La syntaxe de configuration comprend les sections suivantes :

  1. Configuration : le bloc de configuration est le bloc de script le plus à l’extérieur. Il commence par le mot clé Configuration, et vous fournirez un nom. Ici, le nom de la configuration est MyDscConfiguration.

    Le bloc de configuration décrit la configuration souhaitée. Un bloc de configuration peut être vu comme une fonction, sauf qu’il décrit les ressources à installer au lieu de contenir le code pour les installer.

    Comme une fonction PowerShell, un bloc de configuration peut prendre des paramètres. Par exemple, vous pouvez paramétrer le nom du nœud.

    Configuration MyDscConfiguration {
    param
    (
        [string] $ComputerName='localhost'
    )
    
    Node $ComputerName {
        ...
    }
    
  2. Nœud : vous pouvez avoir un ou plusieurs blocs de nœuds. Le bloc de nœuds détermine les noms des fichiers .mof générés quand vous compilez la configuration. Par exemple, le nom du nœud localhost génère un seul fichier localhost.mof , mais vous pouvez envoyer ce fichier .mof à n’importe quel serveur. Vous générez plusieurs fichiers. mof quand vous utilisez plusieurs noms de nœud.

    Utilisez la notation de tableau dans le bloc de nœuds pour cibler plusieurs hôtes. Par exemple :

    Node @('WEBSERVER1', 'WEBSERVER2', 'WEBSERVER3')
    
  3. Ressource : Vous pouvez utiliser un ou plusieurs blocs de ressources pour spécifier les ressources à configurer. Dans ce cas, un seul bloc de ressources fait référence à la ressource WindowsFeature. La WindowsFeature ressource permet d’assurer que la Web-Server fonctionnalité Windows est installée.

  4. MyDscConfiguration : le bloc MyDscConfigurationest appelé par cet appel. Cela ressemble à l’exécution d’une fonction. Quand vous exécutez un bloc de configurations, il est compilé dans un document au format MOF (Managed Object Format). MOF est un langage compilé créé par Desktop Management Task Force, basé sur IDL (Interface Definition Language).

    Pour chaque nœud figurant dans le script DSC, un fichier .mof est créé dans le dossier que vous avez spécifié avec le paramètre -OutputPath.

Données de configuration dans le script DSC

Vous pouvez fournir des données qui peuvent être nécessaires au processus de configuration dans un bloc de données de configuration. Vous pouvez appliquer ces données à des nœuds nommés ou l’appliquer globalement sur tous les nœuds.

Un bloc de données de configuration est un bloc nommé qui contient un tableau de nœuds. Le tableau doit être nommé AllNodes. Dans le tableau AllNodes, vous spécifiez les données pour un nœud avec la variable NodeName.

À l’aide du scénario précédent, supposons que sur le serveur Web qui est installé sur chaque nœud, vous souhaitez définir la propriété SiteName sur des valeurs différentes. Vous pouvez définir un bloc de données de configuration comme suit :

$datablock =
@{
    AllNodes =
    @(
        @{
            NodeName = "WEBSERVER1"
            SiteName = "WEBSERVER1-Site"
        },
        @{
            NodeName = "WEBSERVER2"
            SiteName = "WEBSERVER2-Site"
        },
        @{
            NodeName = "WEBSERVER3"
            SiteName = "WEBSERVER3-Site"
        }
    );
}

Si vous voulez définir une propriété sur la même valeur dans chaque nœud, spécifiez NodeName = "*" dans le tableau AllNodes.

Informations d’identification sécurisées dans un script DSC

Un script DSC peut nécessiter des informations d’identification pour le processus de configuration. Évitez de placer des informations d’identification en texte clair dans votre outil de gestion du code source. À la place, les configurations DSC dans Azure Automation peuvent faire référence à des informations d’identification stockées dans un objet PSCredential. Vous pouvez définir un paramètre pour le script DSC à l’aide du type PSCredential . Avant d’exécuter le script, obtenez les informations d’identification de l’utilisateur, utilisez les informations d’identification pour créer un objet PSCredential et transmettez cet objet dans le script en tant que paramètre.

Les informations d’identification ne sont pas chiffrées dans les fichiers .mof par défaut ; ils sont exposés en texte clair. Pour chiffrer les informations d’identification, utilisez un certificat dans vos données de configuration. La clé privée du certificat doit être présente sur le nœud auquel vous voulez appliquer la configuration. Les certificats sont configurés via le Gestionnaire de configuration local du nœud.

À compter de PowerShell 5.1, les fichiers .mof sur le nœud sont chiffrés au repos. Toutes les informations d’identification sont chiffrées en transit via WinRM.

Envoyer (push) la configuration au nœud

Une fois que vous avez créé un fichier .mof compilé pour une configuration, vous pouvez l’envoyer (push) à un nœud en exécutant la cmdlet Start-DscConfiguration. Si vous ajoutez le chemin au répertoire, il applique les fichiers .mof trouvés dans ce répertoire au nœud :

Start-DscConfiguration -path D:\

Cette étape correspond au mode Envoi (push) décrit dans l’unité précédente.

Extraire la configuration pour les nœuds

Si vous avez des centaines de machines virtuelles sur Azure, l’utilisation du mode Tirage (pull) est plus appropriée que celle du mode Envoi (push).

Vous pouvez configurer un compte Azure Automation pour qu’il agisse en tant que service d’extraction ; chargez simplement la configuration sur le compte Automation, puis inscrivez vos machines virtuelles auprès de ce compte.

Avant de compiler votre configuration, importez les modules PowerShell dont le processus DSC a besoin dans votre compte Automation. Ces modules définissent comment effectuer la tâche pour atteindre l’état souhaité.

Par exemple, un script DSC dans l’unité précédente utilisait le module PowerShell xSmbShare pour indiquer à DSC comment vérifier l’état d’un partage de fichiers. DSC tire (pull) automatiquement les modules du compte Automation vers le nœud.

Le diagramme suivant montre comment configurer Azure Automation State Configuration. Nous allons explorer ces étapes plus en avant dans l’unité suivante.

Diagram that shows the steps to set up DSC.

Par défaut, après 15 minutes, le Gestionnaire de configuration local sur la machine virtuelle interroge Azure Automation quant aux éventuelles modifications apportées au fichier de configuration DSC. Les modifications apportées aux machines virtuelles sont enregistrées dans la configuration d’état souhaité. Si vous modifiez une configuration, vous pouvez la charger vers le compte Automation : les machines virtuelles sont alors reconfigurées automatiquement.

Le diagramme suivant montre les étapes suivies par le Gestionnaire de configuration local pour gérer l’état souhaité sur la machine virtuelle.

Diagram that shows how the VM polls Azure Automation.

Votre compte Automation gère les informations d’identification en mode natif. Cette fonctionnalité réduit la complexité de la sécurisation et de l’utilisation des informations d’identification.