Desired State Configuration 扩展与 Azure 资源管理器模板

本文介绍 Desired State Configuration (DSC) 扩展处理程序的 Azure 资源管理器模板。

注意

你可能会遇到略有不同的架构示例。 2016 年 10 月发行版中发生了架构更改。 有关详细信息,请参阅从以前的格式更新

VM 的 Bicep 示例

DSC 扩展继承默认扩展属性。 有关详细信息,请参阅 VirtualMachineExtension 类

@description('URI of the configuration package')
param configUri string

@description('first configuration parameter')
param arg1 string

@description('second configuration parameter')
@secure()
param arg2 string

var configName = split(split(configUri, '/')[4], '.')[0]

resource vm 'Microsoft.Compute/virtualMachines@2023-09-01' existing = {
  name: srvName
}

resource configuration_dscext 'Microsoft.Compute/virtualMachines/extensions@2024-07-01' = {
  name: 'configurationname_dscext'
  parent: vm
  location: location
  properties: {
    publisher: 'Microsoft.Powershell'
    type: 'DSC'
    typeHandlerVersion: '2.77'
    autoUpgradeMinorVersion: true
    settings: {
      wmfVersion: 'latest'
      configuration: {
        url: configUri
        script: 'configurationname_dscext.ps1'
        function: 'configurationname_dscext'
      }
      configurationArguments: {
        arg1: arg1
      }
      advancedOptions: {
        rebootNodeIfNeeded: true
      }
    }
    protectedSettings: {
      configurationArguements: {
        arg2: arg2
      }
    }
  }
}

Windows 虚拟机规模集的 Bicep 示例

虚拟机规模集节点具有一个包含 extensionProfile 特性的部分。 在“扩展”下,添加 DSC 扩展的详细信息。

有关创作部署虚拟机规模集扩展的模板的最新详细信息,请参阅文档 Microsoft.Compute virtualMachineScaleSets

DSC 扩展继承默认扩展属性。 有关详细信息,请参阅 VirtualMachineScaleSetExtension 类

Settings 与 protectedSettings

所有设置保存在 VM 上的 settings 文本文件中。 settings 下面列出的属性是公共属性。 公共属性未在 settings 文本文件中加密。 protectedSettings 下面列出的属性已使用证书加密,因此不会在 VM 上的 settings 文件中以明文显示。

如果配置需要凭据,可将凭据包含在 protectedSettings 中:

"protectedSettings": {
    "configurationArguments": {
        "parameterOfTypePSCredential1": {
               "userName": "UsernameValue1",
               "password": "PasswordValue1"
        }
    }
}

在 Azure 存储中使用配置脚本的示例

以下示例摘自 DSC 扩展处理程序概述。 此示例使用 Resource Manager 模板而不是cmdlet 来部署该扩展。 保存 IisInstall.ps1 配置,将它放在 .zip 文件(例如 iisinstall.zip)中,并将该文件上传到可访问的 URL 中。 此示例使用 Azure Blob 存储,但可以从任意位置下载 .zip 文件。

在资源管理器模板中,以下代码指示 VM 下载正确的文件并运行适当的 PowerShell 函数:

"settings": {
    "configuration": {
        "url": "https://demo.blob.core.chinacloudapi.cn/iisinstall.zip",
        "script": "IisInstall.ps1",
        "function": "IISInstall"
    }
},
"protectedSettings": {
    "configurationUrlSasToken": "odLPL/U1p9lvcnp..."
}

从以前的格式更新

以前扩展格式中的所有设置(包含公共属性 ModulesUrlModuleSourceModuleVersionConfigurationFunctionSasTokenProperties)会自动调整为当前扩展格式。 它们按以前的相同方式运行。

以下架构显示了以前的 settings 架构的大致形式:

"settings": {
    "WMFVersion": "latest",
    "ModulesUrl": "https://UrlToZipContainingConfigurationScript.ps1.zip",
    "SasToken": "SAS Token if ModulesUrl points to private Azure Blob Storage",
    "ConfigurationFunction": "ConfigurationScript.ps1\\ConfigurationFunction",
    "Properties": {
        "ParameterToConfigurationFunction1": "Value1",
        "ParameterToConfigurationFunction2": "Value2",
        "ParameterOfTypePSCredential1": {
            "UserName": "UsernameValue1",
            "Password": "PrivateSettingsRef:Key1"
        },
        "ParameterOfTypePSCredential2": {
            "UserName": "UsernameValue2",
            "Password": "PrivateSettingsRef:Key2"
        }
    }
},
"protectedSettings": {
    "Items": {
        "Key1": "PasswordValue1",
        "Key2": "PasswordValue2"
    },
    "DataBlobUri": "https://UrlToConfigurationDataWithOptionalSasToken.psd1"
}

以前的格式调整为当前格式后的情况如下所示:

当前属性名称 以前架构的等效值
settings.wmfVersion settings.WMFVersion
settings.configuration.url settings.ModulesUrl
settings.configuration.script settings.ConfigurationFunction 的第 1 部分(在“\\”之前)
settings.configuration.function settings.ConfigurationFunction 的第 2 部分(在“\\”之后)
settings.configuration.module.name settings.ModuleSource
settings.configuration.module.version settings.ModuleVersion
settings.configurationArguments settings.Properties
settings.configurationData.url protectedSettings.DataBlobUri(没有 SAS 令牌)
settings.privacy.dataCollection settings.Privacy.dataCollection
settings.advancedOptions.downloadMappings settings.AdvancedOptions.DownloadMappings
protectedSettings.configurationArguments protectedSettings.Properties
protectedSettings.configurationUrlSasToken settings.SasToken
protectedSettings.configurationDataUrlSasToken protectedSettings.DataBlobUri 中的 SAS 令牌

故障排除

下面是可能会遇到的一些错误及其解决方法。

无效值

“Privacy.dataCollection 为‘{0}’。 可能的值只有 ''、'Enable' 和 'Disable'”。 “WmfVersion 为‘{0}’。 唯一的可能值为 ... 和 'latest'”。

问题:不允许使用提供的值。

解决方案;将无效值更改为有效值。

无效的 URL

“ConfigurationData.url 为‘{0}’。 这不是有效的 URL”。“DataBlobUri 为‘{0}’。 这不是有效的 URL”。“Configuration.url 为‘{0}’。 这不是有效的 URL”

问题:提供的 URL 无效。

解决方案;检查提供的所有 URL。 确保所有 URL 都解析为扩展可在远程计算机上访问的有效位置。

无效的 ConfigurationArgument 类型

“无效的 configurationArguments 类型 {0}”

问题:ConfigurationArguments 属性无法解析为哈希表对象。

解决方案;将 ConfigurationArguments 属性设置为哈希表。 遵循上述示例中提供的格式。 请注意引号、逗号和括号。

重复的 ConfigurationArguments

“在公共和受保护的 configurationArguments 中发现重复的参数‘{0}’”

问题:公共设置中的 ConfigurationArguments 和受保护设置中的 ConfigurationArguments 包含同名属性。

解决方案;删除其中一个重复的属性。

缺少属性

“settings.Configuration.function 要求指定 settings.configuration.url 或 settings.configuration.module”

“settings.Configuration.url 要求指定 settings.configuration.script”

“settings.Configuration.script 要求指定 settings.configuration.url”

“settings.Configuration.url 要求指定 settings.configuration.function”

“protectedSettings.ConfigurationUrlSasToken 要求指定 settings.configuration.url”

“protectedSettings.ConfigurationDataUrlSasToken 要求指定 settings.configurationData.url”

问题:定义的属性需要另一个缺少的属性。

解决方法

  • 提供缺少的属性。
  • 删除需要缺失属性的属性。

后续步骤