電腦設定移轉規劃的 Azure 自動化狀態設定

機器設定是 Azure 自動化狀態設定 (也稱為 Azure 自動化 Desired State Configuration,簡稱 AADSC) 所提供的最新功能實作。 在可行的情況下,您應該規劃將自己的內容和機器移至這個新服務。 此文章提供相關指引,說明如何開發從 Azure 自動化到機器設定的移轉策略。

機器設定中的新功能可解決客戶要求:

  • 將設定大小限制增加到 100 MB
  • 透過 Azure Resource Graph 取得進階報告,包括資源識別碼和狀態
  • 管理相同機器的多個設定
  • 當機器從所需的狀態漂移時,您可以控制發生補救的時機
  • Linux 和 Windows 都會取用 PowerShell 型的 DSC 資源

在開始之前,建議先閱讀 Azure 原則機器設定分頁上的概念性概觀資訊。

了解移轉

移轉的最佳做法是先重新部署內容,然後再移轉機器。 本節概述移轉的預期步驟。

  1. 從 Azure 自動化匯出設定
  2. 探索模組需求並將其載入您的環境
  3. 編譯設定
  4. 建立並發佈機器設定套件
  5. 測試機器設定套件
  6. 將混合式機器上線至 Azure Arc
  7. 從 Azure 自動化狀態設定將伺服器取消註冊
  8. 使用機器設定將設定指派給伺服器

機器設定使用 DSC 第 3 版並搭配 PowerShell 第 7 版。 DSC 第 3 版可以與 WindowsLinux 中的舊版 DSC 並存。 實作是各自獨立的。 不過,沒有任何衝突偵測。

機器設定不會要求針對服務發佈模組或設定,或是在服務中加以編譯。 相反地,您會使用針對特定目的所建置的工具來開發及測試內容,並將內容發佈至機器可以透過 HTTPS 觸及的任何位置 (通常是 Azure Blob 儲存體)。

如果您決定同時在這兩個服務中留有機器一段時間,技術上並無任何障礙。 這兩個服務是互相獨立的。

從 Azure 自動化匯出內容

首先,請從 Azure 自動化狀態設定中探索內容,並將其匯出至開發環境中,讓您可以在其中建立、測試及發佈適用於機器設定的內容套件。

設定

您只能從 Azure 自動化匯出設定指令碼。 您無法匯出節點設定或編譯的 MOF 檔案。 如果您直接將 MOF 檔案發佈至自動化帳戶,且無法再存取原始檔案,則必須從私人設定指令碼重新編譯。 如果您找不到原始設定,則必須重新撰寫設定。

若要從 Azure 自動化匯出設定指令碼,請先識別具有設定的 Azure 自動化帳戶,以及自動化帳戶部署所在資源群組的名稱。

安裝 PowerShell 模組 Az.Automation

Install-Module -Name Az.Automation

接下來,請使用 Get-AzAutomationAccount 命令來識別您的自動化帳戶,以及其部署所在的資源群組。 ResourceGroupNameAutomationAccountName 屬性對於後續步驟很重要。

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

探索自動化帳戶中的設定。 輸出中會針對每個設定包含一個項目。 如果您有許多輸入,請將該資訊儲存為變數,以便較輕鬆地使用。

$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

最後,使用 Export-AzAutomationDscConfiguration 命令將每個設定匯出至本機指令檔。 所產生的檔案名稱會使用 \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

使用 PowerShell 管線匯出設定

探索到您的帳戶和設定數目之後,建議您將所有設定匯出到您機器上的本機資料夾。 若要將此程序自動化,請透過管線將前面範例中每個命令的輸出傳遞至下一個命令。

此範例會匯出五個設定。 輸出模式是成功與否的唯一指標。

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

考慮分解複雜的設定檔

機器設定可以為每部機器管理多個設定。 針對 Azure 自動化狀態設定所撰寫的許多設定,都會假設針對每部機器只能管理單一設定的限制。 若要利用機器設定所提供的擴充功能,則可以將大型設定檔分割成許多較小的設定,其中的每個控制代碼會處理一項特定案例。

機器設定中無協調流程能控制如何將組態加以排序。 如果設定中的步驟必須循序進行,請將步驟保留在一起。

模組

您無法從 Azure 自動化匯出模組,或自動關聯出有哪些設定需要哪些模組和版本。 您必須在本機環境中擁有模組,才能建立新的機器設定套件。 若要建立移轉所需的模組清單,請使用 PowerShell 對 Azure 自動化查詢模組名稱和版本。

如果您使用自訂撰寫的模組,且這些模組只存在於您的私人開發環境中,則無法從 Azure 自動化匯出這些模組。

如果您在設定所需的環境中以及帳戶中找不到自訂模組,則無法編譯設定。 因此,您無法移轉設定。

列出在 Azure 自動化中匯入的模組

若要擷取安裝在自動化帳戶中的所有模組清單,請使用 Get-AzAutomationModule 命令。 IsGlobal 屬性能告訴您模組是否一直都是內建至 Azure 自動化中的,還是該模組是發佈至帳戶的。

例如,若要建立發佈至您任何帳戶的所有模組清單。

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

您也可以使用 PowerShell 資源庫,來協助您尋找可公開取得之模組的詳細資料。 下列範例會列出內建於新自動化帳戶且包含 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

如果模組是從 PowerShell 資源庫匯入,您可以透過管線將 Find-Module 的輸出直接傳遞到 Install-Module。 透過管線來跨命令傳遞輸出可提供解決方案,以使用目前在自動化帳戶中的所有模組載入開發人員環境,但前提是這些模組可於 PowerShell 資源庫中取得。

您可以使用同樣的方法從自訂 NuGet 摘要中提取模組,但前提是該摘要已作為 PowerShellGet 存放庫註冊至您的本機環境。

此範例中的 Find-Module 命令並不會隱藏錯誤,這表示在資源庫中找不到任何模組都會傳回錯誤訊息。

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

檢查設定指令碼以取得模組需求

如果您已從 Azure 自動化匯出設定指令碼,您也可以檢閱內容,以取得將每個設定編譯成 MOF 檔案需要哪些模組的詳細資料。 只有當您在自動化帳戶中找到其模組已經移除的設定時,才會需要此作法。 這些設定對於機器已不再有用,但其仍然可能會留在帳戶中。

在每個檔案的頂端,尋找包括 Import-DscResource 的行。 此命令僅適用於設定之內,且是用來在編譯期間載入模組。

例如,PowerShell 資源庫中的 WindowsIISServerConfig 設定具有此範例中的行。

configuration WindowsIISServerConfig
{

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

該設定要求您具備 xWebAdministration 模組 1.19.0.0 版,以及 PSDesiredStateConfiguration 模組。

在 Azure 機器設定中測試內容

若要評估您是否可以搭配使用來自 Azure 自動化狀態設定的內容與機器設定,請遵循如何建立自訂機器設定套件成品頁面的逐步教學課程。

當您到達撰寫設定步驟時,產生 MOF 檔案的設定指令碼應該要是您從 Azure 自動化狀態設定匯出的其中一個指令碼。 您必須先在環境中安裝必要的 PowerShell 模組,才能將設定編譯成 MOF 檔案,並建立機器設定套件。

如果模組無法與機器設定搭配使用該怎麼辦?

某些模組與機器設定之間可能會有相容性問題。 最常見的問題與 .NET Framework 和 .NET Core 之間的差異有關。 此頁面提供詳細的技術資訊:Windows PowerShell 5.1 與 PowerShell 7.x 之間的差異

解決相容性問題的其中一個選項,是透過執行 powershell.exe 從在 PowerShell 7 中匯入的模組內,於 Windows PowerShell 中執行命令。 您可以在 Azure-Policy 存放庫中檢閱使用此技術的範例模組,其中會加以使用來稽核 Windows DSC 設定 (英文) 的狀態。

該範例也會說明一個小概念證明。

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

我是否需要在所有移轉的模組中針對 Get-TargetResource 新增 Reasons 屬性?

從 Azure 入口網站檢視設定指派的結果時,實作 Reasons 屬性可提供更好的體驗。 如果模組中的 Get 方法未包括 Reasons,系統會傳回一般輸出,以及 Get 方法傳回的屬性詳細資料。 因此,對移轉而言,這是選用的屬性。

電腦

在機器設定中測試完來自 Azure 自動化狀態設定的內容之後,請開發移轉機器的計劃。

Azure 自動化狀態設定可同時供 Azure 中的虛擬機器,以及位於 Azure 外的混合式機器使用。 您必須使用不同的步驟個別針對這兩個案例制定計畫。

Azure VM

Azure 虛擬機器在 Azure 中已經擁有資源,這表示其已準備好接受機器設定指派,來與某個設定產生關聯。 移轉 Azure 虛擬機器的概觀工作,是將其從 Azure 自動化狀態設定中移除,然後使用機器設定指派設定。

若要從 Azure 自動化狀態設定移除機器,請遵循如何從自動化狀態設定移除設定和節點頁面中的步驟。

若要使用機器設定指派設定,請遵循 Azure 原則快速入門中的步驟,例如快速入門:建立原則指派以識別不符合規範的資源。 在步驟 6 中選取原則定義時,請挑選會套用您從 Azure 自動化狀態設定移轉之設定的定義。

混合式機器

Azure 外部的機器可以註冊至 Azure 自動化狀態設定,但其在 Azure 中沒有機器資源。 機器內部的本機設定管理員 (LCM) 服務會處理與 Azure 自動化的連線。 節點的記錄會以 Azure 自動化提供者類型中資源的形式進行管理。

從 Azure 自動化狀態設定移除機器之前,請先將每個節點以已啟用 Azure Arc 的伺服器的形式上線。 上線至 Azure Arc 會在 Azure 中建立機器資源,讓 Azure 原則可以管理機器。 機器可以隨時上線到 Azure Arc,但您可以使用 Azure 自動化狀態設定來將此程序自動化。

針對匯出內容時的問題進行疑難排解

本節會提供已知問題的詳細資料。

匯出設定會導致檔案名稱中出現 "\" 字元

在 macOS 和 Linux 上使用 PowerShell 時,您可能會在處理 Export-AzAutomationDSCConfiguration 所輸出的檔案名稱時發生問題。

作為因應措施,我們已將名為 AADSCConfigContent (英文) 的模組發佈至 PowerShell 資源庫。 該模組只有單一命令,該命令會對服務做出 REST 要求,來匯出儲存在 Azure 自動化中之設定的內容。

下一步

  • 開發自訂機器設定套件
  • 使用 GuestConfiguration 模組建立 Azure 原則定義,為環境進行大規模的管理。
  • 使用 Azure 入口網站 [指派您的自訂原則定義][20]。
  • 了解如何檢視 [機器設定的合規性詳細資料][21] 原則指派。