Azure Automation-tillståndskonfiguration för planering av datorkonfigurationsmigrering

Datorkonfiguration är den senaste implementeringen av funktioner som har tillhandahållits av Azure Automation State Configuration (kallas även Azure Automation Desired State Configuration eller AADSC). Om det är möjligt bör du planera att flytta innehåll och datorer till den nya tjänsten. Den här artikeln innehåller vägledning om hur du utvecklar en migreringsstrategi från Azure Automation till datorkonfiguration.

Nya funktioner i datorkonfigurationen hanterar kundförfrågningar:

  • Ökad storleksgräns för konfigurationer till 100 MB
  • Avancerad rapportering via Azure Resource Graph, inklusive resurs-ID och tillstånd
  • Hantera flera konfigurationer för samma dator
  • När datorerna avviker från önskat tillstånd styr du när reparationen sker
  • Både Linux och Windows använder PowerShell-baserade DSC-resurser

Innan du börjar är det en bra idé att läsa den konceptuella översiktsinformationen på sidan Azure Policys datorkonfiguration.

Förstå migrering

Det bästa sättet att migrera är att omdistribuera innehåll först och sedan migrera datorer. I det här avsnittet beskrivs de förväntade stegen för migrering.

  1. Exportera konfigurationer från Azure Automation
  2. Identifiera modulkrav och läs in dem i din miljö
  3. Kompilera konfigurationer
  4. Skapa och publicera datorkonfigurationspaket
  5. Testa datorkonfigurationspaket
  6. Registrera hybriddatorer till Azure Arc
  7. Avregistrera servrar från Azure Automation State Configuration
  8. Tilldela konfigurationer till servrar med hjälp av datorkonfiguration

Datorkonfigurationen använder DSC version 3 med PowerShell version 7. DSC version 3 kan samexistera med äldre versioner av DSC i Windows och Linux. Implementeringarna är separata. Det finns dock ingen konfliktidentifiering.

Datorkonfiguration kräver inte publicering av moduler eller konfigurationer i en tjänst eller kompilering i en tjänst. I stället utvecklar och testar du innehåll med hjälp av specialbyggda verktyg och publicerar innehållet var som helst där datorn kan nå via HTTPS (vanligtvis Azure Blob Storage).

Om du bestämmer dig för att ha datorer i båda tjänsterna under en viss tidsperiod finns det inga tekniska hinder. De två tjänsterna är oberoende.

Exportera innehåll från Azure Automation

Börja med att identifiera och exportera innehåll från Azure Automation State Configuration till en utvecklingsmiljö där du skapar, testar och publicerar innehållspaket för datorkonfiguration.

-konfigurationer

Du kan bara exportera konfigurationsskript från Azure Automation. Det går inte att exportera nodkonfigurationer eller kompilerade MOF-filer. Om du har publicerat MOF-filer direkt till Automation-kontot och inte längre har åtkomst till den ursprungliga filen måste du kompilera om från dina privata konfigurationsskript. Om du inte hittar den ursprungliga konfigurationen måste du auktorisera den igen.

Om du vill exportera konfigurationsskript från Azure Automation ska du först identifiera det Azure Automation-konto som har konfigurationerna och namnet på resursgruppen som Automation-kontot distribueras i.

Installera PowerShell-modulen Az.Automation.

Install-Module -Name Az.Automation

Get-AzAutomationAccount Använd sedan kommandot för att identifiera dina Automation-konton och resursgruppen där de distribueras. Egenskaperna ResourceGroupName och AutomationAccountName är viktiga för nästa steg.

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                  : {}

Identifiera konfigurationerna i ditt Automation-konto. Utdata har en post per konfiguration. Om du har många lagrar du informationen som en variabel så att det är enklare att arbeta med.

$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

Exportera slutligen varje konfiguration till en lokal skriptfil med kommandot Export-AzAutomationDscConfiguration. Det resulterande filnamnet använder mönstret \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

Exportera konfigurationer med PowerShell-pipelinen

När du har upptäckt dina konton och antalet konfigurationer kanske du vill exportera alla konfigurationer till en lokal mapp på datorn. Automatisera den här processen genom att skicka utdata från varje kommando i de tidigare exemplen till nästa kommando.

Exemplet exporterar fem konfigurationer. Utdatamönstret är den enda indikatorn på framgång.

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

Överväg att dela upp komplexa konfigurationsfiler

Datorkonfiguration kan hantera mer än en konfiguration per dator. Många konfigurationer som skrivits för Azure Automation State Configuration antog begränsningen att hantera en enda konfiguration per dator. Om du vill dra nytta av de utökade funktionerna som erbjuds av datorkonfigurationen kan du dela upp stora konfigurationsfiler i många mindre konfigurationer där var och en hanterar ett specifikt scenario.

Det finns ingen orkestrering i datorkonfigurationen för att styra ordningen på hur konfigurationer sorteras. Håll stegen i en konfiguration tillsammans i ett paket om de måste ske sekventiellt.

Moduler

Det går inte att exportera moduler från Azure Automation eller automatiskt korrelera vilka konfigurationer som kräver vilka moduler och versioner. Du måste ha modulerna i din lokala miljö för att kunna skapa ett nytt datorkonfigurationspaket. Om du vill skapa en lista över moduler som du behöver för migrering använder du PowerShell för att fråga Azure Automation om namnet och versionen av modulerna.

Om du använder moduler som är anpassade och endast finns i din privata utvecklingsmiljö går det inte att exportera dem från Azure Automation.

Om du inte hittar en anpassad modul i din miljö som krävs för en konfiguration och i kontot kan du inte kompilera konfigurationen. Därför kan du inte migrera konfigurationen.

Lista moduler som importerats i Azure Automation

Om du vill hämta en lista över alla moduler som är installerade i ditt automationskonto använder du Get-AzAutomationModule kommandot . Egenskapen IsGlobal anger om modulen alltid är inbyggd i Azure Automation eller om den har publicerats till kontot.

Om du till exempel vill skapa en lista över alla moduler som publicerats till något av dina konton.

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

Du kan också använda PowerShell-galleriet som hjälp för att hitta information om moduler som är offentligt tillgängliga. I följande exempel visas de moduler som är inbyggda i nya Automation-konton och som innehåller DSC-resurser.

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

Om modulerna importerades från PowerShell-galleriet kan du skicka utdata direkt Find-Module till Install-Module. Att skicka utdata mellan kommandon ger en lösning för att läsa in en utvecklarmiljö med alla moduler som för närvarande finns i ett Automation-konto om de är tillgängliga i PowerShell-galleriet.

Du kan använda samma metod för att hämta moduler från en anpassad NuGet-feed om du har registrerat feeden i din lokala miljö som en PowerShellGet-lagringsplats.

Kommandot Find-Module i det här exemplet undertrycker inte fel, vilket innebär att moduler som inte hittas i galleriet returnerar ett felmeddelande.

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

Granska konfigurationsskript för modulkrav

Om du har exporterat konfigurationsskript från Azure Automation kan du också granska innehållet för mer information om vilka moduler som krävs för att kompilera varje konfiguration till en MOF-fil. Den här metoden behövs bara om du hittar konfigurationer i dina Automation-konton där modulerna har tagits bort. Konfigurationerna skulle inte längre vara användbara för datorer, men de kan fortfarande finnas i kontot.

Leta efter en rad som innehåller Import-DscResourceöverst i varje fil. Det här kommandot gäller endast i en konfiguration och används för att läsa in moduler vid tidpunkten för kompileringen.

Konfigurationen WindowsIISServerConfig i PowerShell-galleriet har till exempel raderna i det här exemplet.

configuration WindowsIISServerConfig
{

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

Konfigurationen kräver att du har modulen xWebAdministration version 1.19.0.0 och modulen PSDesiredStateConfiguration.

Testa innehåll i Azure-datorkonfiguration

Om du vill utvärdera om du kan använda ditt innehåll från Azure Automation State Configuration med datorkonfiguration följer du den stegvisa självstudien på sidan Skapa artefakter för anpassade datorkonfigurationspaket.

När du når steget Skapa en konfiguration bör konfigurationsskriptet som genererar en MOF-fil vara ett av skripten som du exporterade från Azure Automation State Configuration. Du måste ha nödvändiga PowerShell-moduler installerade i din miljö innan du kan kompilera konfigurationen till en MOF-fil och skapa ett datorkonfigurationspaket.

Vad händer om en modul inte fungerar med datorkonfiguration?

Vissa moduler kan ha kompatibilitetsproblem med datorkonfigurationen. De vanligaste problemen gäller .NET Framework jämfört med .NET Core. Detaljerad teknisk information finns på sidan Skillnader mellan Windows PowerShell 5.1 och PowerShell 7.x.

Ett alternativ för att lösa kompatibilitetsproblem är att köra kommandon i Windows PowerShell inifrån en modul som importeras i PowerShell 7 genom att köra powershell.exe. Du kan granska en exempelmodul som använder den här tekniken på Azure-Policy-lagringsplatsen där den används för att granska tillståndet för Windows DSC-konfiguration.

Exemplet illustrerar också ett litet konceptbevis.

# 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
}

Behöver jag lägga till egenskapen Reasons i Get-TargetResource i alla moduler som jag migrerar?

Att implementera egenskapen Reasons ger en bättre upplevelse när du visar resultatet av en konfigurationstilldelning från Azure-portalen. Get Om metoden i en modul inte innehåller Skäl returneras allmänna utdata med information från de egenskaper som returneras av Get metoden. Därför är det valfritt för migrering.

Datorer

När du har testat innehåll från Azure Automation State Configuration i datorkonfigurationen ska du utveckla en plan för migrering av datorer.

Azure Automation State Configuration är tillgängligt för både virtuella datorer i Azure och hybriddatorer utanför Azure. Du måste planera för var och en av dessa scenarier med olika steg.

Virtuella Azure-datorer

Virtuella Azure-datorer har redan en resurs i Azure, vilket innebär att de är redo för datorkonfigurationstilldelningar som associerar dem med en konfiguration. De övergripande uppgifterna för att migrera virtuella Azure-datorer är att ta bort dem från Azure Automation State Configuration och sedan tilldela konfigurationer med hjälp av datorkonfiguration.

Om du vill ta bort en dator från Azure Automation State Configuration följer du stegen på sidan Så här tar du bort en konfiguration och nod från Automation State Configuration.

Om du vill tilldela konfigurationer med hjälp av datorkonfiguration följer du stegen i Snabbstarter för Azure Policy, till exempel Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser. I steg 6 när du väljer en principdefinition väljer du definitionen som tillämpar en konfiguration som du migrerade från Azure Automation State Configuration.

Hybriddatorer

Datorer utanför Azure kan registreras i Azure Automation State Configuration, men de har ingen datorresurs i Azure. Tjänsten Local Configuration Manager (LCM) på datorn hanterar anslutningen till Azure Automation. Posten för noden hanteras som en resurs i Azure Automation-providertypen.

Innan du tar bort en dator från Azure Automation State Configuration bör du registrera varje nod som en Azure Arc-aktiverad server. Registrering i Azure Arc skapar en datorresurs i Azure så att Azure Policy kan hantera datorn. Datorn kan registreras i Azure Arc när som helst, men du kan använda Azure Automation State Configuration för att automatisera processen.

Felsöka problem vid export av innehåll

Information om kända problem finns i det här avsnittet.

Om du exporterar konfigurationer visas tecknet "\" i filnamnet

När du använder PowerShell på macOS och Linux kan du ha problem med att hantera filnamnens utdata från Export-AzAutomationDSCConfiguration.

Som en lösning har en modul publicerats till PowerShell-galleriet med namnet AADSCConfigContent. Modulen har bara ett kommando som exporterar innehållet i en konfiguration som lagras i Azure Automation genom att göra en REST-begäran till tjänsten.

Nästa steg