将计算机配置为所需状态

注意

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 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/