你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Desired State Configuration 扩展处理程序简介

注意

在启用 DSC 扩展之前,我们希望你知道 DSC 的较新版本目前已正式发布,由名为 Azure 机器配置的 Azure Policy 功能管理。 Azure Machine Configuration 服务结合了 DSC 扩展、Azure Automation State Configuration 以及客户反馈中最常请求的功能。 Azure Machine Configuration 还包括通过已启用 Arc 的服务器提供的混合计算机支持。

用于 Azure 虚拟机的 Azure VM 扩展以及关联的扩展是 Microsoft Azure 基础结构服务的一部分。 Azure VM 扩展是软件组件,可以扩展 VM 功能并简化各种 VM 管理操作。

用于 Windows PowerShell 的 Azure Desired State Configuration (DSC) 扩展的主要用途是将 VM 启动到 Azure 自动化 State Configuration (DSC) 服务。 该服务带来的好处包括持续管理 VM 配置并与其他操作工具(例如 Azure Monitor)集成。 可以使用扩展将 VM 注册到服务,并获得跨 Azure 订阅工作的灵活解决方案。

可以独立于 Automation DSC 服务运行 DSC 扩展,但此方法仅将配置推送到 VM。 系统不会提供持续的报告,只能在 VM 本地执行此类操作。 在启用 DSC 扩展之前,请查看可用的 DSC 版本,并选择支持配置要求的版本。

本文介绍如何将 DSC 扩展用于自动化加入,或将其用作使用 Azure SDK 为虚拟机分配配置的工具。

可用的 DSC 版本

有几个版本的 Desired State Configuration 可用于实现。 在启用 DSC 扩展之前,请选择最能支持你的配置和业务目标的 DSC 版本。

版本 可用性 说明
2.0 正式版 Desired State Configuration 2.0 支持与 Azure Automanage 机器配置功能一起使用。 机器配置功能结合了 DSC 扩展处理程序、Azure 自动化 State Configuration 的功能以及客户反馈中最常请求的功能。 机器配置还包括通过已启用 Arc 的服务器提供的混合计算机支持。
1.1 正式版 如果实现不使用 Azure Automanage 机器配置功能,则应选择 Desired State Configuration 1.1。 有关详细信息,请参阅 PSDesiredStateConfiguration v1.1
3.0 公共预览版 Desired State Configuration 3.0 在公共 beta 版中提供。 此版本应仅用于 Azure 机器配置,或用于非生产环境,以测试从 Desired State Configuration 1.1 迁移。

先决条件

  • 本地计算机:若要与 Azure DSC 扩展交互,必须使用 Azure 门户或本地计算机上的 Azure PowerShell SDK。

  • 来宾代理:由 DSC 配置准备的 Azure VM 必须使用支持 Windows Management Framework (WMF) 4.0 或更高版本的操作系统。 有关支持的操作系统版本的完整列表,请参阅 Azure DSC 扩展版本历史记录

术语和概念

本文假设读者熟悉以下概念:

  • 配置是指 DSC 配置文档。

  • 节点标识 DSC 配置的目标。 在本文中,节点一律指 Azure VM。

  • 配置数据存储在 PowerShell DSC 格式化文件 (.psd1) 中,其中包含配置的环境数据。

体系结构

Azure DSC 扩展使用 Azure VM 扩展框架来传送、启用和报告 Azure VM 上运行的 DSC 配置。 DSC 扩展接受配置文档和一组参数。 如果未提供任何文件,默认配置脚本会嵌入到扩展中。 默认配置脚本仅用于在本地配置管理器中设置元数据。

首次调用扩展时,该扩展使用以下逻辑安装某个版本的 WMF:

  • 如果 Azure VM 操作系统是 Windows Server 2016,则不执行任何操作。 Windows Server 2016 上已安装最新版本的 PowerShell。

  • 如果指定了 wmfVersion 属性,则安装指定的 WMF 版本,除非指定的版本与 VM 上的操作系统不兼容。

  • 如果未指定 wmfVersion 属性,则安装 WMF 的最新适用版本。

WMF 安装过程需要重启。 重启后,扩展将下载 modulesUrl 属性中指定的 .zip 文件(若已提供)。 如果此位置在 Azure Blob 存储中,则可以在 sasToken 属性中指定 SAS 令牌来访问该文件。 下载并解压缩 .zip 后,configurationFunction 中定义的配置函数将运行以生成托管对象格式 (MOF) 文件 (.mof)。 然后,扩展使用生成的 .mof 文件来运行 Start-DscConfiguration -Force 命令。 扩展将捕获输出并将其写入 Azure 状态通道。

默认配置脚本

Azure DSC 扩展包括一个默认配置脚本,当你将 VM 加入 Azure 自动化 State Configuration 服务时应使用该脚本。 脚本参数符合本地配置管理器的可配置属性。 有关脚本参数,请参阅 Desired State Configuration 扩展与 Azure 资源管理器 (ARM) 模板中的默认配置脚本。 有关完整脚本,请参阅 GitHub 中的 Azure 快速入门模板

Azure 自动化 State Configuration 注册

使用 Azure DSC 扩展向 Azure 自动化 State Configuration 服务注册节点时,请提供以下值:

  • RegistrationUrl:Azure 自动化帐户的 https 地址。
  • RegistrationKey:用于向服务注册节点的共享机密。
  • NodeConfigurationName:从服务拉取以配置服务器角色的节点配置 (MOF) 的名称。 该值是节点配置的名称,而不是配置的名称。

可以从 Azure 门户收集这些值,或在 Windows PowerShell 中运行以下命令:

(Get-AzAutomationRegistrationInfo -ResourceGroupName <resourcegroupname> -AutomationAccountName <accountname>).Endpoint
(Get-AzAutomationRegistrationInfo -ResourceGroupName <resourcegroupname> -AutomationAccountName <accountname>).PrimaryKey

节点配置名称

对于 NodeConfigurationName 参数,请确保提供节点配置的名称,而不是配置的名称。

配置是在用于编译节点配置(MOF 文件)的脚本中定义的。 节点配置的名称始终是配置的名称,后跟句点 . 以及 localhost 或特定计算机名称。

警告

确保 Azure 自动化 State Configuration 中存在节点配置。 如果此值不存在,则扩展部署将返回失败。

ARM 模板部署

部署 DSC 扩展的最常见方法是使用 Azure 资源管理器模板。 有关详细信息以及如何在 ARM 模板中包含 DSC 扩展的示例,请参阅 Desired State Configuration 扩展与 ARM 模板

PowerShell cmdlet 部署

用于管理 DSC 扩展的 PowerShell cmdlet 最适合用于交互式故障排除和信息收集方案。 可以使用 cmdlet 来打包、发布和监视 DSC 扩展部署。 DSC 扩展的 cmdlet 当前未更新,无法使用默认配置脚本

下面是一些可用的 PowerShell cmdlet:

  • Publish-AzVMDscConfiguration cmdlet 检索配置文件,扫描其中是否有依赖的 DSC 资源,然后创建一个 .zip 文件。 该 .zip 文件包含启用配置所需的配置和 DSC 资源。 该 cmdlet 还可以使用 -OutputArchivePath 参数在本地创建包。 否则,该 cmdlet 会将 .zip 文件发布到 Blob 存储,然后使用 SAS 令牌保护该文件。

    该 cmdlet 创建的 PowerShell 配置脚本 (.ps1) 位于存档文件夹根目录中的 .zip 文件内。 模块文件夹位于资源的存档文件夹中。

  • Set-AzVMDscExtension cmdlet 将 PowerShell DSC 扩展所需的设置注入 VM 配置对象。

  • Get-AzVMDscExtension cmdlet 检索特定 VM 的 DSC 扩展状态。

  • Get-AzVMDscExtensionStatus cmdlet 检索由 DSC 扩展处理程序启用的 DSC 配置的状态。 可以在一个或一组 VM 上执行此操作。

  • Remove-AzVMDscExtension cmdlet 从特定的 VM 中删除扩展处理程序。 请记住,此 cmdlet 不会删除配置、卸载 WMF 或更改 VM 上已应用的设置。 该 cmdlet 只删除扩展处理程序。

重要注意事项

使用 Azure 资源管理器 cmdlet 时,需要注意几个注意事项。

  • Azure Resource Manager cmdlet 是同步的。

  • 需要多个参数,包括 ResourceGroupNameVMNameArchiveStorageAccountNameVersionLocation

  • ArchiveResourceGroupName 是一个可选参数。 如果存储帐户所属的资源组与创建 VM 的资源组不同,请指定此参数。

  • 使用 AutoUpdate 开关可在有最新版本可用时将扩展处理程序自动更新为最新版本。 当发布了新版本的 WMF 时,此参数可能会导致 VM 重启。

使用 PowerShell cmdlet 进行配置

Azure DSC 扩展可在部署过程中使用 DSC 配置文档直接配置 Azure VM。 此步骤不会将节点注册到自动化。 请记住,节点不是集中管理的。

下面的代码显示了一个简单的示例配置。 若要使用此示例,请将此配置在本地另存为 iisInstall.ps1 脚本文件。

configuration IISInstall
{
    node "localhost"
    {
        WindowsFeature IIS
        {
            Ensure = "Present"
            Name = "Web-Server"
        }
    }
}

以下 PowerShell 命令将 iisInstall.ps1 脚本放在指定的 VM 上。 这些命令还会执行配置,然后报告状态。

$resourceGroup = 'dscVmDemo'
$vmName = 'myVM'
$storageName = 'demostorage'
#Publish the configuration script to user storage
Publish-AzVMDscConfiguration -ConfigurationPath .\iisInstall.ps1 -ResourceGroupName $resourceGroup -StorageAccountName $storageName -force
#Set the VM to run the DSC configuration
Set-AzVMDscExtension -Version '2.76' -ResourceGroupName $resourceGroup -VMName $vmName -ArchiveStorageAccountName $storageName -ArchiveBlobName 'iisInstall.ps1.zip' -AutoUpdate -ConfigurationName 'IISInstall'

Azure CLI 部署

可以使用 Azure CLI 将 DSC 扩展部署到现有 VM。 以下示例演示如何在 Windows 上部署 VM。

对于运行 Windows 的 VM,请使用以下命令:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name DSC \
  --publisher Microsoft.Powershell \
  --version 2.77 --protected-settings '{}' \
  --settings '{}'

Azure 门户部署

若要在 Azure 门户中设置 DSC 扩展,请执行以下步骤:

  1. 转到某个 VM。

  2. 在“设置”下,选择“扩展 + 应用程序”。

  3. 在“扩展”下,选择“+ 添加”。

  4. 选择“PowerShell Desired State Configuration”,然后选择“下一步”。

  5. 为 DSC 扩展配置以下参数。

    注意

    如果使用默认配置脚本,请记住,以下大多数参数都必须直接在 Azure 门户中定义,而不是通过脚本定义。

    • 配置模块或脚本:(必需)为 VM 提供配置模块或脚本文件。

      配置模块和脚本需要一个包含配置脚本的 .ps1 文件,或者需要一个 .zip 文件,其中的 .ps1 配置脚本位于根目录。 如果使用 .zip 文件,则必须将所有依赖资源包含在 .zip 文件的模块文件夹中。 可以使用 Azure PowerShell SDK 随附的 Publish-AzureVMDscConfiguration -OutputArchivePath cmdlet 来创建 .zip 文件。 系统会将 .zip 文件上传到用户 Blob 存储中,并使用 SAS 令牌对其进行保护。

    • 模块限定的配置名称:(必需)指定此设置以在单个 .ps1 脚本文件中包含多个配置函数。 对于此设置,请输入配置 .ps1 脚本文件的名称,后跟斜线 \,然后输入配置函数的名称。 例如,如果 .ps1 脚本文件的名称为 configuration.ps1 且配置名称为 IisInstall,请输入设置的值 configuration.ps1\IisInstall

    • 配置参数:如果配置函数采用参数,请使用格式 argumentName1=value1,argumentName2=value2 输入值。 请注意,此格式不同于用于在 PowerShell cmdlet 或 ARM 模板中指定配置参数的格式。

      注意

      可以在默认配置脚本中定义配置参数。

    • 配置数据 PSD1 文件:如果配置需要 .pd1 格式的配置数据文件,请使用此设置选择数据文件并将其上载到用户 Blob 存储。 配置数据文件使用 Blob 存储中的 SAS 令牌进行保护。

    • WMF 版本:指定要在 VM 上安装的 Windows Management Framework 版本。 如果选择“最新”(默认值),系统会安装最新版本的 WMF。 其他可能的值包括 4.0、5.0 和 5.1。 可能值将来可能会更新。

    • 数据收集:如果希望 DSC 扩展收集有关 VM 的遥测数据,请启用此设置。 有关详细信息,请参阅 Azure DSC 扩展数据集合

    • 版本:(必需)指定要安装的 DSC 扩展的版本。 有关版本的信息,请参阅 Azure DSC 扩展版本历史记录

    • 自动升级次要版本:此设置映射到 cmdlet 中的 AutoUpdate 开关。 配置此设置,使 DSC 扩展在安装过程中自动更新到最新版本。 “”指示 DSC 扩展处理程序使用最新可用版本。 “”(默认)强制安装“版本”设置中指定的版本。

  6. 配置参数后,选择“审阅 + 创建”,然后选择“创建”。

DSC 扩展日志

可以在 C:\WindowsAzure\Logs\Plugins\Microsoft.Powershell.DSC\<version number> 下查看 VM 上 Azure DSC 扩展的日志。

后续步骤