将计算机配置为所需状态
注意
Azure 自动化 State Configuration 将于 2027 年 9 月 30 日停用,请在该日期之前转换到 Azure 计算机配置。 有关详细信息,请参阅博客文章公告。 Azure Machine Configuration 服务结合了 DSC 扩展、Azure Automation State Configuration 以及客户反馈中最常请求的功能。 Azure Machine Configuration 还包括通过已启用 Arc 的服务器提供的混合计算机支持。
使用 Azure 自动化状态配置可以指定服务器配置,并确保这些服务器在一段时间后处于指定状态。
- 登记要由 Azure Automation DSC 管理的 VM
- 将配置上传到 Azure 自动化
- 将配置编译为节点配置
- 将节点配置分配给托管节点
- 检查托管节点的符合性状态
在本教程中,我们使用简单 DSC 配置,以确保在 VM 上安装 IIS。
先决条件
- 一个 Azure 自动化帐户。 若要了解有关 Azure 自动化帐户及其要求的更多信息,请参阅自动化帐户身份验证概述。
- 一个运行 Windows Server 2008 R2 或更高版本的 Azure 资源管理器 VM(非经典)。 如需创建 VM 的说明,请参阅在 Azure 门户中创建第一个 Windows 虚拟机。
- Azure PowerShell 模块 3.6 版或更高版本。 运行
Get-Module -ListAvailable Az
即可查找版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 - 熟悉所需状态配置 (DSC)。 有关 DSC 文档的信息,请参阅 Windows PowerShell Desired State Configuration 概述。
对部分配置的支持
Azure Automation State Configuration 支持使用部分配置。 在这种情况下,DSC 配置为独立管理多个配置,并从 Azure 自动化检索每个配置。 但是,每个自动化帐户只能向节点分配一个配置。 这意味着,如果对一个节点使用两个配置,则需要两个自动化帐户。
有关如何从请求服务注册部分配置的详细信息,请参阅部分配置的文档。
如需深入了解团队如何使用配置即代码协作管理服务器,请参阅了解 DSC 在 CI/CD 管道中的角色。
登录 Azure
使用 [Connect-AzAccount -Environment AzureChinaCloud][10] cmdlet 登录到 Azure 订阅,然后按屏幕说明执行操作。
Connect-AzAccount -Environment AzureChinaCloud
创建配置并将配置上传到 Azure 自动化
在文本编辑器中键入以下内容,并在本地将文件保存为 TestConfig.ps1。
configuration TestConfig {
Node WebServer {
WindowsFeature IIS {
Ensure = 'Present'
Name = 'Web-Server'
IncludeAllSubFeature = $true
}
}
}
注意
Azure 自动化中的配置名称必须限制为不超过 100 个字符。
在需要导入多个提供 DSC 资源的模块的更高级方案中,请确保每个模块在配置中具有唯一 Import-DscResource
行。
调用 [Import-AzAutomationDscConfiguration][13] cmdlet,将配置上传到自动化帐户。
$importAzAutomationDscConfigurationSplat = @{
SourcePath = 'C:\DscConfigs\TestConfig.ps1'
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
Published = $ture
}
Import-AzAutomationDscConfiguration @importAzAutomationDscConfigurationSplat
将配置编译为节点配置
必须先将 DSC 配置编译为节点配置,然后才能将它分配给节点。 参阅 DSC 配置。
调用 [Start-AzAutomationDscCompilationJob][15] cmdlet,将 TestConfig
配置编译为自动化帐户中名为 TestConfig.WebServer
的节点配置。
$startAzAutomationDscCompilationJobSplat = @{
ConfigurationName = 'TestConfig'
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
}
Start-AzAutomationDscCompilationJob @startAzAutomationDscCompilationJobSplat
注册要由状态配置管理的 VM
可以使用 Azure 自动化状态配置来管理 Azure VM(包括经典 VM 和资源管理器 VM)、本地 VM、Linux 计算机、AWS VM,以及本地物理机。 本文介绍如何仅注册 Azure 资源管理器 VM。 有关注册其他类型的计算机的信息,请参阅 [登记由 Azure 自动化状态配置管理的计算机][20]。
调用 [Register-AzAutomationDscNode][14] cmdlet,将 VM 作为托管节点注册到 Azure Automation State Configuration。
$registerAzAutomationDscNodeSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
AzureVMName = 'DscVm'
}
Register-AzAutomationDscNode @registerAzAutomationDscNodeSplat
指定配置模式设置
使用 [Register-AzAutomationDscNode][16] cmdlet,将 VM 注册为托管节点并指定配置属性。 例如,可以通过指定 ApplyOnly
作为 ConfigurationMode
属性的值,指定计算机的状态仅应用一次。 State Configuration 不会尝试在初始检查后应用配置。
$registerAzAutomationDscNodeSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
AzureVMName = 'DscVm'
ConfigurationMode = 'ApplyOnly'
}
Register-AzAutomationDscNode @registerAzAutomationDscNodeSplat```
You can also specify how often DSC checks the configuration state by using the
`ConfigurationModeFrequencyMins` property. For more information about DSC configuration settings,
see [Configuring the Local Configuration Manager][05].
```powershell
# Run a DSC check every 60 minutes
$registerAzAutomationDscNodeSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
AzureVMName = 'DscVm'
ConfigurationModeFrequencyMins = 60
}
Register-AzAutomationDscNode @registerAzAutomationDscNodeSplat```
## Assign a node configuration to a managed node
Now we can assign the compiled node configuration to the VM we want to configure.
```powershell
# Get the ID of the DSC node
$getAzAutomationDscNodeSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
Name = 'DscVm'
}
$node = Get-AzAutomationDscNode @getAzAutomationDscNodeSplat
# Assign the node configuration to the DSC node
$setAzAutomationDscNodeSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
NodeConfigurationName = 'TestConfig.WebServer'
NodeId = $node.Id
}
Set-AzAutomationDscNode @setAzAutomationDscNodeSplat
这会将名为 TestConfig.WebServer
的节点配置分配到已注册 DSC 节点 DscVm
。
默认情况下,每隔 30 分钟会检查一次 DSC 节点是否符合节点配置。 有关如何更改符合性检查间隔的信息,请参阅配置本地配置管理器。
检查托管节点的符合性状态
可通过使用 [Get-AzAutomationDscNodeReport][12] cmdlet 来获取有关托管节点符合性状态的报告。
# Get the ID of the DSC node
$getAzAutomationDscNodeSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
Name = 'DscVm'
}
$node = Get-AzAutomationDscNode @getAzAutomationDscNodeSplat
# Get an array of status reports for the DSC node
$getAzAutomationDscNodeReportSplat = @{
ResourceGroupName = 'MyResourceGroup'
AutomationAccountName = 'myAutomationAccount'
NodeId = $node.Id
}
$reports = Get-AzAutomationDscNodeReport @getAzAutomationDscNodeReportSplat
# Display the most recent report
$reports[0]
后续步骤
- 有关入门信息,请参阅 [Azure Automation State Configuration 入门][19]。
- 要了解如何启用节点,请参阅 [启用 Azure Automation State Configuration][20]。
- 若要了解如何编译 DSC 配置,以便将它们分配给目标节点,请参阅 [在 Azure Automation State Configuration 中编译 DSC 配置][18]。
- 若要查看在持续部署管道中使用 Azure Automation State Configuration 的示例,请参阅 [使用 Chocolatey 设置持续部署][17]。
- 有关定价信息,请参阅 [Azure Automation State Configuration 定价][21]。
- 有关 PowerShell cmdlet 参考,请参阅 [Az.Automation][11]。
[10]: https://learn.microsoft.com/powershell/module/Az.Accounts/Connect-AzAccount -Environment AzureChinaCloud [11]: https://learn.microsoft.com/powershell/module/az.automation [12]: https://learn.microsoft.com/powershell/module/Az.Automation/Get-AzAutomationDscNodeReport [13]: https://learn.microsoft.com/powershell/module/Az.Automation/Import-AzAutomationDscConfiguration [14]: https://learn.microsoft.com/powershell/module/Az.Automation/Register-AzAutomationDscNode [15]: https://learn.microsoft.com/powershell/module/Az.Automation/Start-AzAutomationDscCompilationJob [16]: https://learn.microsoft.com/powershell/module/azurerm.automation/register-azurermautomationdscnode [17]: automation-dsc-cd-chocolatey.md [18]: automation-dsc-compile.md [19]: automation-dsc-getting-started.md [20]: automation-dsc-onboarding.md [21]: https://www.azure.cn/pricing/details/automation/