Konfiguracja stanu usługi Azure Automation do planowania migracji konfiguracji maszyny

Uwaga

Usługa Azure Automation State Configuration zostanie wycofana 30 września 2027 r., przechodząc do usługi Azure Machine Configuration do tej daty. Aby uzyskać więcej informacji, zobacz ogłoszenie w blogu. Usługa Azure Machine Configuration łączy funkcje rozszerzenia DSC, usługi Azure Automation State Configuration i najczęściej żądanych funkcji opinii klientów. Usługa Azure Machine Configuration obejmuje również obsługę maszyn hybrydowych za pośrednictwem serwerów z obsługą usługi Arc.

Konfiguracja maszyny to najnowsza implementacja funkcji zapewniana przez usługę Azure Automation State Configuration (nazywana również usługą Azure Automation Desired State Configuration lub AADSC). Gdy jest to możliwe, należy zaplanować przeniesienie zawartości i maszyn do nowej usługi. W tym artykule przedstawiono wskazówki dotyczące opracowywania strategii migracji z usługi Azure Automation do konfiguracji maszyny.

Nowe funkcje konfiguracji maszyny dotyczą żądań klientów:

  • Zwiększony limit rozmiaru konfiguracji do 100 MB
  • Zaawansowane raportowanie za pomocą usługi Azure Resource Graph, w tym identyfikator zasobu i stan
  • Możliwość zarządzania wieloma konfiguracjami dla tej samej maszyny
  • Możliwość kontrolowania, kiedy korygowanie występuje, gdy maszyny dryfują z żądanego stanu
  • Zasoby DSC oparte na programie PowerShell dla systemów Linux i Windows

Przed rozpoczęciem warto przeczytać koncepcyjne informacje o przeglądzie na stronie Konfiguracja maszyny usługi Azure Policy.

Omówienie migracji

Najlepszym podejściem do migracji jest najpierw ponowne wdrożenie zawartości, a następnie migracja maszyn. W tej sekcji opisano oczekiwane kroki migracji.

  1. Eksportowanie konfiguracji z usługi Azure Automation
  2. Odnajdywanie wymagań modułu i ładowanie ich w środowisku
  3. Kompilowanie konfiguracji
  4. Tworzenie i publikowanie pakietów konfiguracji maszyny
  5. Pakiety konfiguracji maszyny testowej
  6. Dołączanie maszyn hybrydowych do usługi Azure Arc
  7. Wyrejestrowywanie serwerów z usługi Azure Automation State Configuration
  8. Przypisywanie konfiguracji do serwerów przy użyciu konfiguracji maszyny

Konfiguracja maszyny używa rozszerzenia DSC w wersji 2 z programem PowerShell w wersji 7. DsC w wersji 3 może współistnieć ze starszymi wersjami DSC w systemach Windows i Linux. Implementacje są oddzielne. Nie ma jednak wykrywania konfliktów.

Konfiguracja maszyny nie wymaga publikowania modułów ani konfiguracji w usłudze ani kompilowania w usłudze. Zamiast tego tworzysz i testujesz zawartość przy użyciu specjalnie utworzonych narzędzi i publikujesz zawartość w dowolnym miejscu, do którego maszyna może dotrzeć za pośrednictwem protokołu HTTPS (zazwyczaj usługi Azure Blob Storage).

Jeśli zdecydujesz się na posiadanie maszyn w obu usługach przez jakiś czas, nie ma barier technicznych. Obie usługi są niezależne.

Eksportowanie zawartości z usługi Azure Automation

Zacznij od odnajdywania i eksportowania zawartości z usługi Azure Automation State Configuration do środowiska deweloperskiego, w którym tworzysz, testujesz i publikujesz pakiety zawartości na potrzeby konfiguracji komputera.

Konfiguracje

Skrypty konfiguracji można eksportować tylko z usługi Azure Automation. Nie można wyeksportować konfiguracji węzłów ani skompilowanych plików MOF. Jeśli pliki MOF zostały opublikowane bezpośrednio na koncie usługi Automation i nie masz już dostępu do oryginalnego pliku, musisz ponownie skompilować z prywatnych skryptów konfiguracji. Jeśli nie możesz znaleźć oryginalnej konfiguracji, musisz ją ponownie uwierzytelnić.

Aby wyeksportować skrypty konfiguracji z usługi Azure Automation, najpierw zidentyfikuj konto usługi Azure Automation, które ma konfiguracje i nazwę grupy zasobów, w ramach którego jest wdrażane konto usługi Automation.

Zainstaluj moduł Programu PowerShell Az.Automation.

Install-Module -Name Az.Automation

Następnie użyj Get-AzAutomationAccount polecenia , aby zidentyfikować konta usługi Automation i grupę zasobów, w której zostały wdrożone. Właściwości ResourceGroupName i AutomationAccountName są ważne w następnych krokach.

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

Odkryj konfiguracje na koncie usługi Automation. Dane wyjściowe zawierają jeden wpis na konfigurację. Jeśli masz wiele, zapisz informacje jako zmienną, aby ułatwić pracę z.

$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

Na koniec wyeksportuj każdą konfigurację do pliku skryptu lokalnego przy użyciu polecenia Export-AzAutomationDscConfiguration. Wynikowa nazwa pliku używa wzorca \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

Eksportowanie konfiguracji przy użyciu potoku programu PowerShell

Możesz wyeksportować wszystkie konfiguracje do folderu lokalnego na komputerze. Aby zautomatyzować ten proces, należy przekazać dane wyjściowe każdego polecenia we wcześniejszych przykładach do następnego polecenia.

Poniższy przykład eksportuje pięć konfiguracji. Wzorzec danych wyjściowych jest jedynym wskaźnikiem sukcesu.

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

Rozważ oddzielenie złożonych plików konfiguracji

Konfiguracja maszyny może zarządzać więcej niż jedną konfiguracją na maszynę. Wiele konfiguracji napisanych dla usługi Azure Automation State Configuration zakładało ograniczenie zarządzania pojedynczą konfiguracją na maszynę. Aby skorzystać z rozszerzonych możliwości oferowanych przez konfigurację maszyny, można podzielić duże pliki konfiguracji na wiele mniejszych konfiguracji, w których każdy obsługuje określony scenariusz.

W konfiguracji maszyny nie ma orkiestracji w celu kontrolowania kolejności sortowania konfiguracji. Zachowaj kroki w konfiguracji razem w jednym pakiecie, jeśli są one wymagane do wykonania sekwencyjnie.

Moduły

Nie można eksportować modułów z usługi Azure Automation ani automatycznie korelować, które konfiguracje wymagają modułów i wersji. Aby utworzyć nowy pakiet konfiguracji maszyny, musisz mieć moduły w środowisku lokalnym. Aby utworzyć listę modułów potrzebnych do migracji, użyj programu PowerShell, aby wykonać zapytanie dotyczące usługi Azure Automation pod kątem nazwy i wersji modułów.

Jeśli używasz modułów, które są niestandardowe i istnieją tylko w prywatnym środowisku projektowym, nie można ich wyeksportować z usługi Azure Automation.

Jeśli brakuje modułu wymaganego do konfiguracji i na koncie, nie możesz skompilować konfiguracji. W związku z tym nie można przeprowadzić migracji konfiguracji.

Wyświetlanie listy modułów zaimportowanych w usłudze Azure Automation

Aby pobrać listę wszystkich modułów zainstalowanych na koncie usługi Automation, użyj Get-AzAutomationModule polecenia . Właściwość IsGlobal informuje, czy moduł jest zawsze wbudowany w usługę Azure Automation lub czy został opublikowany na koncie.

Aby na przykład utworzyć listę wszystkich modułów opublikowanych na dowolnych kontach.

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

Możesz również użyć Galeria programu PowerShell jako pomocy w znalezieniu szczegółów dotyczących modułów, które są publicznie dostępne. W poniższym przykładzie wymieniono moduły wbudowane w nowe konta usługi Automation i zawierają zasoby 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

Jeśli moduły zostały zaimportowane z Galeria programu PowerShell, możesz przekazać dane wyjściowe bezpośrednio Find-Module do elementu Install-Module. Potokowanie danych wyjściowych między poleceniami zapewnia rozwiązanie do załadowania środowiska deweloperskiego ze wszystkimi modułami obecnie na koncie usługi Automation, jeśli są dostępne w Galeria programu PowerShell.

Możesz użyć tego samego podejścia, aby ściągnąć moduły z niestandardowego źródła danych NuGet. Musisz zarejestrować źródło danych w środowisku lokalnym jako repozytorium PowerShellGet.

Polecenie Find-Module w tym przykładzie nie pomija błędów, co oznacza, że żadne moduły nie odnalezione w galerii zwracają komunikat o błędzie.

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

Sprawdzanie skryptów konfiguracji pod kątem wymagań modułu

Po wyeksportowaniu skryptów konfiguracji z usługi Azure Automation możesz przejrzeć zawartość, aby uzyskać szczegółowe informacje o modułach wymaganych do skompilowania każdej konfiguracji do pliku MOF. Takie podejście jest wymagane tylko w przypadku znalezienia konfiguracji na kontach usługi Automation, które nie mają modułów. Konfiguracje nie będą już przydatne dla maszyn, ale nadal mogą znajdować się na koncie.

W górnej części każdego pliku poszukaj wiersza zawierającego Import-DscResourceelement . To polecenie ma zastosowanie tylko wewnątrz konfiguracji i służy do ładowania modułów w czasie kompilacji.

Na przykład WindowsIISServerConfig konfiguracja w Galeria programu PowerShell zawiera wiersze w tym przykładzie.

configuration WindowsIISServerConfig
{

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

Konfiguracja wymaga modułu xWebAdministration w wersji 1.19.0.0 i modułu PSDesiredStateConfiguration.

Testowanie zawartości w konfiguracji maszyny platformy Azure

Aby ocenić, czy możesz użyć zawartości z usługi Azure Automation State Configuration na potrzeby konfiguracji maszyny, postępuj zgodnie z samouczkiem krok po kroku w temacie How to create custom machine configuration package artifacts (Jak utworzyć artefakty pakietów konfiguracji niestandardowej maszyny).

Po osiągnięciu kroku Tworzenie konfiguracji skrypt konfiguracji, który generuje plik MOF, powinien być jednym ze skryptów wyeksportowanych z usługi Azure Automation State Configuration. Aby można było skompilować konfigurację do pliku MOF i utworzyć pakiet konfiguracji maszyny, musisz mieć zainstalowane wymagane moduły programu PowerShell w środowisku.

Co zrobić, jeśli moduł nie działa z konfiguracją maszyny?

Niektóre moduły mogą mieć problemy ze zgodnością z konfiguracją maszyny. Najczęstsze problemy są związane z platformą .NET Framework a platformą .NET Core. Szczegółowe informacje techniczne są dostępne na stronie Różnice między programem Windows PowerShell 5.1 i programem PowerShell 7.x.

Aby rozwiązać problemy ze zgodnością, możesz uruchomić polecenia w programie Windows PowerShell z poziomu modułu zaimportowanego w programie PowerShell 7, uruchamiając polecenie powershell.exe. Możesz przejrzeć przykładowy moduł, który używa tej techniki w repozytorium Azure-Policy, w którym jest używany do inspekcji stanu konfiguracji DSC systemu Windows.

W przykładzie przedstawiono również mały dowód koncepcji.

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

Czy muszę dodać właściwość Reasons do polecenia Get-TargetResource we wszystkich migrowanych modułach?

Zaimplementowanie właściwości Reasons zapewnia lepsze środowisko podczas wyświetlania wyników przypisania konfiguracji z witryny Azure Portal. Get Jeśli metoda w module nie zawiera przyczyn, dane wyjściowe ogólne są zwracane ze szczegółami właściwości zwróconych przez metodęGet. W związku z tym migracja jest opcjonalna.

Maszyny

Usługa Azure Automation State Configuration jest dostępna dla maszyn wirtualnych na platformie Azure i maszynach hybrydowych znajdujących się poza platformą Azure. Należy zaplanować każdy z tych scenariuszy, wykonując różne kroki.

Maszyny wirtualne platformy Azure

Maszyny wirtualne platformy Azure mają już zasób na platformie Azure, co oznacza, że są one gotowe do przypisań konfiguracji maszyn, które je kojarzą z konfiguracją. Ogólne zadania migracji maszyn wirtualnych platformy Azure to usunięcie ich z usługi Azure Automation State Configuration, a następnie przypisanie konfiguracji przy użyciu konfiguracji maszyny.

Aby usunąć maszynę z usługi Azure Automation State Configuration, wykonaj kroki opisane na stronie Jak usunąć konfigurację i węzeł z usługi Automation State Configuration.

Aby przypisać konfiguracje przy użyciu konfiguracji maszyny, wykonaj kroki opisane w przewodnikach Szybki start usługi Azure Policy, takich jak Szybki start: tworzenie przypisania zasad w celu zidentyfikowania niezgodnych zasobów. W kroku 6 podczas wybierania definicji zasad wybierz definicję, która ma zastosowanie do konfiguracji migrowanej z usługi Azure Automation State Configuration.

Maszyny hybrydowe

Maszyny spoza platformy Azure można zarejestrować w usłudze Azure Automation State Configuration, ale nie mają zasobu maszyny na platformie Azure. Usługa Local Configuration Manager (LCM) wewnątrz maszyny obsługuje połączenie z usługą Azure Automation. Rekord węzła jest zarządzany jako zasób w typie dostawcy usługi Azure Automation.

Przed usunięciem maszyny z usługi Azure Automation State Configuration dołącz każdy węzeł jako serwer z obsługą usługi Azure Arc. Dołączanie do usługi Azure Arc tworzy zasób maszyny na platformie Azure, aby usługa Azure Policy mogła zarządzać maszyną. Maszynę można dołączyć do usługi Azure Arc w dowolnym momencie, ale możesz użyć usługi Azure Automation State Configuration do zautomatyzowania procesu.

Rozwiązywanie problemów podczas eksportowania zawartości

Szczegółowe informacje o znanych problemach znajdują się w tej sekcji.

Eksportowanie konfiguracji powoduje wyświetlenie znaku "\" w nazwie pliku

W przypadku korzystania z programu PowerShell w systemach macOS i Linux mogą wystąpić problemy z danymi wyjściowymi nazw plików według .Export-AzAutomationDSCConfiguration

Aby obejść ten problem, zainstaluj moduł AADSCConfigContent z Galeria programu PowerShell. Moduł zawiera jedno polecenie, które eksportuje zawartość konfiguracji przechowywanej w usłudze Azure Automation, wysyłając żądanie REST do usługi.

Następne kroki