電腦設定移轉規劃的 Azure 自動化狀態設定
注意
Azure 自動化 狀態設定 將於 2027 年 9 月 30 日淘汰,請依該日期轉換至 Azure 機器組態。 如需詳細資訊,請參閱 部落格文章 公告。 Azure Machine Configuration 服務結合 DSC 延伸模組、Azure 自動化狀態設定,以及客戶意見反應最常要求的功能。 Azure Machine Configuration 也包含混合機器支援 (透過已啟用 Arc 的伺服器提供)。
計算機設定是 Azure 自動化 狀態設定 提供的最新功能實作(也稱為 Azure 自動化 Desired 狀態設定 或 AADSC)。 在可行的情況下,您應該規劃將自己的內容和機器移至這個新服務。 此文章提供相關指引,說明如何開發從 Azure 自動化到機器設定的移轉策略。
機器設定中的新功能可解決客戶要求:
- 將設定大小限制增加到 100 MB
- 透過 Azure Resource Graph 取得進階報告,包括資源識別碼和狀態
- 能夠管理相同機器的多個組態
- 當機器偏離所需狀態時,能夠控制補救何時發生
- 適用於Linux和 Windows 的 PowerShell 型 DSC 資源
在開始之前,建議先閱讀 Azure 原則機器設定分頁上的概念性概觀資訊。
了解移轉
移轉的最佳做法是先重新部署內容,然後再移轉機器。 本節概述移轉的預期步驟。
- 從 Azure 自動化匯出設定
- 探索模組需求並將其載入您的環境
- 編譯設定
- 建立並發佈機器設定套件
- 測試機器設定套件
- 將混合式機器上線至 Azure Arc
- 從 Azure 自動化狀態設定將伺服器取消註冊
- 使用機器設定將設定指派給伺服器
計算機設定使用 DSC 第 2 版搭配 PowerShell 第 7 版。 DSC 第 3 版可以與 Windows 和 Linux 中的舊版 DSC 並存。 實作是各自獨立的。 不過,沒有任何衝突偵測。
機器設定不會要求針對服務發佈模組或設定,或是在服務中加以編譯。 相反地,您會使用針對特定目的所建置的工具來開發及測試內容,並將內容發佈至機器可以透過 HTTPS 觸及的任何位置 (通常是 Azure Blob 儲存體)。
如果您決定同時在這兩個服務中留有機器一段時間,技術上並無任何障礙。 這兩個服務是互相獨立的。
從 Azure 自動化匯出內容
首先,請從 Azure 自動化狀態設定中探索內容,並將其匯出至開發環境中,讓您可以在其中建立、測試及發佈適用於機器設定的內容套件。
設定
您只能從 Azure 自動化匯出設定指令碼。 您無法匯出節點設定或編譯的 MOF 檔案。 如果您直接將 MOF 檔案發佈至自動化帳戶,且無法再存取原始檔案,則必須從私人設定指令碼重新編譯。 如果您找不到原始設定,則必須重新撰寫設定。
若要從 Azure 自動化匯出設定指令碼,請先識別具有設定的 Azure 自動化帳戶,以及自動化帳戶部署所在資源群組的名稱。
安裝 PowerShell 模組 Az.Automation。
Install-Module -Name Az.Automation
接下來,請使用 Get-AzAutomationAccount
命令來識別您的自動化帳戶,以及其部署所在的資源群組。 ResourceGroupName 和 AutomationAccountName 屬性對於後續步驟很重要。
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 資源庫或 PowerShellGet 存放庫下載模組
如果模組是從 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 7 匯入的模組內,在 Windows PowerShell 中執行 powershell.exe
命令。 您可以在 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 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
文件名輸出問題。
因應措施是從 PowerShell 資源庫 安裝 AADSCConfigContent 模組。 模組有一個命令,其會藉由對服務提出 REST 要求,匯出儲存在 Azure 自動化 中的組態內容。
下一步
- 開發自訂機器設定套件。
- 使用 GuestConfiguration 模組建立 Azure 原則定義,為環境進行大規模的管理。
- 使用 Azure 入口網站指派您的自訂原則定義。
- 了解如何檢視機器設定的合規性詳細資料原則指派。