Planification de la migration d’Azure Automation State Configuration vers la configuration de machine

La configuration de la machine est la dernière implémentation des fonctionnalités fournies par Azure Automation State Configuration (également appelé Azure Automation Desired State Configuration ou AADSC). Dans la mesure du possible, vous devez planifier le déplacement de votre contenu et de vos machines vers le nouveau service. Cet article fournit des conseils sur le développement d’une stratégie de migration d’Azure Automation vers la configuration de la machine.

Les nouvelles fonctionnalités de la configuration d'ordinateur répondent aux demandes des clients :

  • Augmentation de la limite de taille pour les configurations à 100 Mo
  • Rapports avancés grâce à Azure Resource Graph, y compris l'ID et l'état des ressources
  • Gérer plusieurs configurations pour la même machine
  • Lorsque des machines dévient de l’état souhaité, vous contrôlez à quel moment la correction a lieu
  • Linux et Windows utilisent tous deux des ressources DSC basées sur PowerShell

Avant de commencer, il est judicieux de lire les informations conceptuelles sur la page Configuration de machine d’Azure Policy.

Comprendre la migration

La meilleure approche de la migration consiste à redéployer le contenu en premier, puis à migrer les machines. Cette section décrit les étapes attendues pour la migration.

  1. Exporter des configurations à partir d’Azure Automation
  2. Découvrir les exigences des modules et les charger dans votre environnement
  3. Compiler les configurations
  4. Créer des packages de configuration de machine et les publier
  5. Tester les packages de configuration de machine
  6. Intégrer des machines hybrides à Azure Arc
  7. Désinscrire des serveurs d’Azure Automation State Configuration
  8. Attribuer les configurations aux serveurs à l’aide de la configuration de machine

La configuration de machine utilise DSC version 3 avec PowerShell version 7. DSC version 3 peut coexister avec des versions plus anciennes de DSC sous Windows et Linux. Les implémentations sont séparées. Toutefois, il n’y a aucune détection de conflit.

La configuration de machine ne nécessite pas la publication de modules ou de configurations dans un service, ni la compilation dans un service. Au lieu de cela, vous développez et testez le contenu à l’aide d’outils spécialement conçus et le publiez partout où l’ordinateur peut accéder via HTTPS (généralement Stockage Blob Azure).

Si vous décidez de disposer d’ordinateurs dans les deux services pendant un certain temps, il n’y a aucun obstacle technique à cela. Les deux services sont indépendants.

Exporter du contenu à partir d’Azure Automation

Commencez par découvrir et exporter le contenu d’Azure Automation State Configuration dans un environnement de développement dans lequel vous créez, testez et publiez des packages de contenu pour la configuration d’ordinateur.

Configurations

Vous ne pouvez exporter des scripts de configuration qu’à partir d’Azure Automation. Il n’est pas possible d’exporter des configurations de nœud ni des fichiers MOF compilés. Si vous avez publié des fichiers MOF directement dans le compte Automation et que vous n’avez plus accès au fichier d’origine, vous devez exécuter une recompilation à partir de vos scripts de configuration privés. Si vous ne trouvez pas la configuration d’origine, vous devez la recréer.

Pour exporter des scripts de configuration à partir d’Azure Automation, identifiez d’abord le compte Azure Automation contenant les configurations, ainsi que le nom du groupe de ressources dans lequel le compte Automation est déployé.

Installez le module PowerShell AZ.Automation.

Install-Module -Name Az.Automation

Ensuite, utilisez la commande Get-AzAutomationAccount pour identifier vos comptes Automation et le groupe de ressources dans lequel ils sont déployés. Les propriétés ResourceGroupName et AutomationAccountName sont importantes pour les étapes suivantes.

Get-AzAutomationAccount
SubscriptionId        : <your-subscription-id>
ResourceGroupName     : <your-resource-group-name>
AutomationAccountName : <your-automation-account-name>
Location              : centralus
State                 :
Plan                  :
CreationTime          : 6/30/2021 11:56:17 AM -05:00
LastModifiedTime      : 6/30/2021 11:56:17 AM -05:00
LastModifiedBy        :
Tags                  : {}

Découvrez les configurations dans votre compte Automation. La sortie contient une entrée par configuration. Si vous en avez plusieurs, stockez les informations en tant que variable pour faciliter leur utilisation.

$getParams = @{
    ResourceGroupName     = '<your-resource-group-name>'
    AutomationAccountName = '<your-automation-account-name>'
}

Get-AzAutomationDscConfiguration @getParams
ResourceGroupName     : <your-resource-group-name>
AutomationAccountName : <your-automation-account-name>
Location              : centralus
State                 : Published
Name                  : <your-configuration-name>
Tags                  : {}
CreationTime          : 6/30/2021 12:18:26 PM -05:00
LastModifiedTime      : 6/30/2021 12:18:26 PM -05:00
Description           :
Parameters            : {}
LogVerbose            : False

Enfin, exportez chaque configuration dans un fichier de script local à l’aide de la commande Export-AzAutomationDscConfiguration. Le nom de fichier résultant utilise le modèle \ConfigurationName.ps1.

$exportParams = @{
    OutputFolder          = '<location-on-your-machine>'
    ResourceGroupName     = '<your-resource-group-name>'
    AutomationAccountName = '<your-automation-account-name>'
    Name                  = '<your-configuration-name>'
}
Export-AzAutomationDscConfiguration @exportParams
UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
                                               12/31/1600 18:09

Exporter des configurations à l’aide du pipeline PowerShell

Une fois que vous avez découvert vos comptes et le nombre de configurations, vous souhaiterez peut-être exporter toutes les configurations dans un dossier local sur votre machine. Pour automatiser ce processus, dirigez la sortie de chaque commande dans les exemples précédents vers la commande suivante.

L’exemple exporte 5 configurations. Le modèle de sortie est le seul indicateur de réussite.

Get-AzAutomationAccount |
    Get-AzAutomationDscConfiguration |
    Export-AzAutomationDSCConfiguration -OutputFolder <location on your machine>
UnixMode   User             Group                 LastWriteTime           Size Name
--------   ----             -----                 -------------           ---- ----
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09
                                               12/31/1600 18:09

Envisager de décomposer les fichiers de configuration complexes

La configuration d’ordinateur peut gérer plusieurs configurations par ordinateur. De nombreuses configurations écrites pour Azure Automation State Configuration supposaient la limitation de la gestion d’une seule configuration par machine. Pour tirer parti des fonctionnalités étendues offertes par la configuration d’ordinateur, vous pouvez diviser les fichiers de configuration volumineux en plusieurs configurations plus petites, chacune gérant un scénario spécifique.

Il n’y a pas d’orchestration dans la configuration de machine pour contrôler l’ordre de tri des configurations. Conservez les étapes d’une configuration dans un package si elles doivent se produire de manière séquentielle.

Modules

Il n’est pas possible d’exporter des modules à partir d’Azure Automation ni de mettre automatiquement en corrélation les configurations qui nécessitent tel ou tel module ou version. Les modules doivent être dans votre environnement local pour que vous puissiez créer un nouveau package de configuration de machine. Pour créer une liste des modules dont vous avez besoin pour la migration, utilisez PowerShell pour interroger Azure Automation concernant le nom et la version des modules.

Si vous utilisez des modules personnalisés qui n’existent que dans votre environnement de développement privé, il n’est pas possible de les exporter à partir d’Azure Automation.

Si vous ne trouvez pas de module personnalisé dans votre environnement requis pour une configuration et dans le compte, vous ne pouvez pas compiler la configuration. Par conséquent, vous ne pouvez pas migrer la configuration.

Répertorier les modules importés dans Azure Automation

Pour récupérer la liste de tous les modules installés dans votre compte Automation, utilisez la commande Get-AzAutomationModule. La propriété IsGlobal vous indique si le module est toujours intégré à Azure Automation, ou s’il a été publié sur le compte.

Par exemple, pour créer une liste de tous les modules publiés sur l’un de vos comptes.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $false

Vous pouvez également utiliser PowerShell Gallery pour vous aider à trouver des détails sur les modules qui sont disponibles publiquement. L’exemple suivant répertorie les modules qui sont intégrés aux nouveaux comptes Automation et qui contiennent des ressources DSC.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $true |
    Find-Module -ErrorAction SilentlyContinue |
    Where-Object {'' -ne $_.Includes.DscResource} |
    Select-Object -Property Name, Version -Unique |
    Format-Table -AutoSize
Name                       Version
----                       -------
AuditPolicyDsc             1.4.0
ComputerManagementDsc      8.4.0
PSDscResources             2.12.0
SecurityPolicyDsc          2.10.0
xDSCDomainjoin             1.2.23
xPowerShellExecutionPolicy 3.1.0.0
xRemoteDesktopAdmin        1.1.0.0

Si les modules ont été importés à partir de PowerShell Gallery, vous pouvez diriger la sortie de Find-Module directement vers Install-Module. La redirection de la sortie entre les commandes est une solution qui permet de charger un environnement de développement avec tous les modules actuellement dans un compte Automation qui sont accessibles dans PowerShell Gallery.

Vous pouvez utiliser la même approche pour extraire des modules d’un flux NuGet personnalisé, si vous avez inscrit le flux dans votre environnement local en tant que référentiel PowerShellGet.

Dans cet exemple, la commande Find-Module ne supprime pas les erreurs, ce qui signifie que tous les modules introuvables dans la galerie renvoient un message d’erreur.

Get-AzAutomationAccount |
    Get-AzAutomationModule |
    Where-Object IsGlobal -eq $false |
    Find-Module |
    Where-Object { '' -ne $_.Includes.DscResource } |
    Install-Module

Inspection des scripts de configuration pour les exigences des modules

Si vous avez exporté des scripts de configuration à partir d’Azure Automation, vous pouvez également consulter le contenu pour plus d’informations sur les modules requis pour compiler chaque configuration dans un fichier MOF. Cette approche n’est nécessaire que si vous trouvez des configurations dans vos comptes Automation où les modules ont été supprimés. Les configurations ne sont plus utiles pour les machines, mais elles peuvent toujours figurer dans le compte.

Vers le haut de chaque fichier, recherchez une ligne qui inclut Import-DscResource. Cette commande s’applique uniquement à l’intérieur d’une configuration et est utilisée pour charger les modules au moment de la compilation.

Par exemple, la configuration WindowsIISServerConfig dans PowerShell Gallery contient les lignes de cet exemple.

configuration WindowsIISServerConfig
{

Import-DscResource -ModuleName @{ModuleName = 'xWebAdministration';ModuleVersion = '1.19.0.0'}
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'

La configuration nécessite que vous disposiez du module xWebAdministration version 1.19.0.0 et du module PSDesiredStateConfiguration.

Tester le contenu dans la configuration de machine Azure

Pour évaluer si votre contenu issu d’Azure Automation State Configuration peut être utilisé avec une configuration d’ordinateur, suivez le tutoriel pas à pas de la page Guide pratique pour créer des artefacts de package de configuration machine personnalisés.

Quand vous atteignez l’étape Créer une configuration, le script de configuration qui génère un fichier MOF doit être l’un de ceux que vous avez exportés à partir d’Azure Automation State Configuration. Vous devez avoir installé les modules PowerShell nécessaires dans votre environnement pour pouvoir compiler la configuration dans un fichier MOF et créer un package de configuration de la machine.

Que se passe-t-il si un module ne fonctionne pas avec la configuration d'ordinateur ?

Certains modules peuvent rencontrer des problèmes de compatibilité avec la configuration d’ordinateur. Les problèmes les plus courants sont liés à .NET Framework et à .NET Core. Des informations techniques détaillées sont disponibles sur la page, Différences entre Windows PowerShell 5.1 et PowerShell 7.x.

Une option pour résoudre les problèmes de compatibilité consiste à exécuter des commandes dans Windows PowerShell à partir d’un module importé dans PowerShell 7, en exécutant powershell.exe. Vous pouvez consulter un exemple de module qui utilise cette technique dans le référentiel Azure-Policy où il est utilisé pour auditer l’état de Windows DSC Configuration.

L’exemple illustre également une petite preuve de concept.

# example function that could be loaded from module
function New-TaskResolvedInPWSH7 {
    # runs the fictitious command 'Get-myNotCompatibleCommand' in Windows PowerShell
    $compatObject = & powershell.exe -NoProfile -NonInteractive -Command {
        Get-myNotCompatibleCommand
    }
    # resulting object can be used in PowerShell 7
    return $compatObject
}

Dois-je ajouter la propriété Reasons à Get-TargetResource dans tous les modules que je migre ?

L’implémentation de la propriété Reasons offre une meilleure expérience lors de l’affichage des résultats d’une affectation de configuration à partir du portail Azure. Si la méthode Get d’un module n’inclut pas la propriété « Reasons », la sortie générique est retournée avec les détails des propriétés retournées par la méthode Get. Par conséquent, cette propriété est facultative pour la migration.

virtuelles

Une fois que vous avez fini de tester le contenu d’Azure Automation State Configuration dans la configuration de machine, développez un plan pour la migration des machines.

Azure Automation State Configuration est disponible à la fois pour les machines virtuelles dans Azure et les machines hybrides en dehors d’Azure. Vous devez planifier chacun de ces scénarios à l’aide de différentes étapes.

Machines virtuelles Azure

Les machines virtuelles Azure disposent déjà d’une ressource dans Azure. Cela signifie qu’elles sont prêtes pour les attributions de configuration de machine qui les associent à une configuration. Les tâches de haut niveau pour la migration des machines virtuelles Azure consistent à les supprimer d’Azure Automation State Configuration, puis à affecter des configurations à l’aide de la configuration de machine.

Pour supprimer une machine d’Azure Automation State Configuration, suivez les étapes de la page Comment supprimer une configuration et un nœud d’Automation State Configuration.

Pour affecter des configurations à l’aide de la configuration de machine, procédez comme décrit dans les guides de démarrage rapide Azure Policy, comme Démarrage rapide : créer une affectation de stratégie pour identifier les ressources non conformes. À l’étape 6 lors de la sélection d’une définition de stratégie, choisissez la définition qui applique une configuration que vous avez migrée à partir d’Azure Automation State Configuration.

Machines hybrides

Les machines en dehors d’Azure peuvent être inscrites à Azure Automation State Configuration, mais elles n’ont pas de ressource de machine dans Azure. Le service Local Configuration Manager (LCM) à l’intérieur de l’ordinateur gère la connexion à Azure Automation. L’enregistrement du nœud est géré en tant que ressource dans le type de fournisseur Azure Automation.

Avant de supprimer une machine d’Azure Automation State Configuration, intégrez chaque nœud en tant que serveur Azure Arc. L’intégration à Azure Arc crée une ressource d’ordinateur dans Azure afin qu’Azure Policy puisse gérer l’ordinateur. La machine peut être intégrée à Azure Arc à tout moment, mais vous pouvez utiliser Azure Automation State Configuration pour automatiser le processus.

Résolution des problèmes lors de l’exportation de contenu

Vous trouverez des détails sur les problèmes connus dans cette section.

L’exportation de configurations entraîne l’insertion du caractère « \ » dans le nom du fichier

Lorsque vous utilisez PowerShell sur MacOS/Linux, vous rencontrez des problèmes liés aux noms de fichiers générés par Export-AzAutomationDSCConfiguration.

Comme solution, un module nommé AADSCConfigContent a été publié dans PowerShell Gallery. Le module n’a qu’une seule commande, qui exporte le contenu d’une configuration stockée dans Azure Automation en créant une requête REST au service.

Étapes suivantes