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

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

DSC 扩展仅将配置推送到 VM。 系统不会提供持续的报告,只能在 VM 本地执行此类操作。

可用的 DSC 版本

DSC 扩展支持 DSC 平台 1.1 版中的配置。 有关详细信息,请参阅 PSDesiredStateConfiguration v1.1

先决条件

  • 开发人员工作站:若要与 Azure DSC 扩展交互,必须使用 Azure 门户或 Azure PowerShell/CLI 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 状态通道。

节点配置名称

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

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

ARM 模板部署

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

PowerShell cmdlet 部署

用于管理 DSC 扩展的 PowerShell cmdlet 最适合用于交互式故障排除和信息收集方案。 可以使用 cmdlet 来打包、发布和监视 DSC 扩展部署。

下面是一些可用的 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 扩展配置以下参数。

    • 配置模块或脚本:(必需)为 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 扩展的日志。

后续步骤