将 dscExtension 部署到 Azure VMSS 时出现问题

Issues deploying dscExtension to Azure VMSS

我在使用部署模板将 dscExtension 部署到 Azure 虚拟机规模集 (VMSS) 时遇到了一些问题。

以下是我将其添加到我的模板中的方法:

{
  "name": "dscExtension",
  "properties": {
    "publisher": "Microsoft.Powershell",
    "type": "DSC",
    "typeHandlerVersion": "2.9",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "ModulesUrl": "[concat(parameters('_artifactsLocation'), '/', 'MyDscPackage.zip', parameters('_artifactsLocationSasToken'))]",
      "ConfigurationFunction": "CmvmProcessor.ps1\CmvmProcessor",
      "Properties": [
        {
          "Name": "ServiceCredentials",
          "Value": {
            "UserName": "parameters('administratorLogin')",
            "Password": "parameters('administratorLoginPassword')"
          },
          "TypeName": "System.Management.Automation.PSCredential"
        }
      ]
    }
  }
}

VMSS 本身已成功部署,但当我浏览各个 VM 的 InstanceView 时,dscExtension 显示失败状态并显示错误消息。

我遇到的问题如下:

ARM 部署不会尝试在重新部署时更新 dscExtension。我习惯于 MSDeploy Web 应用程序扩展,其中更新工件并在每个新部署上重新部署代码。我不知道如何强制它用新的二进制文件更新 dscExtension。事实上,它似乎只在第一次部署 VMSS 时出错,然后它甚至不会再试一次。

我收到的错误是针对不再存在的旧代码。

我之前在自定义 DSC Powershell 脚本中有一个错误,我在其中尝试使用 -replace 运算符,它应该创建一个 $Matches 变量,但它说 $Matches 不存在。

无论如何,我重构了代码并删除了整个资源组,然后重新部署。 dscExtension 仍然给出相同的错误。我已验证我的 DSC .zip 所在的 blob 存储帐户不再具有能够产生此错误消息的代码。 Azure 必须在某处缓存 dscExtension。我无法让它使用我在每次部署前上传的新 blob .zip。

是否了解 DSC 扩展以及如何强制其在部署时更新?

听起来您可能 运行 正在处理多个问题,因此请先尝试简单的。为了在后续部署中获得 运行 的 VM 扩展,您必须 "seed" 它。 (你是对的,这与 AzureRM 的其余部分不同)看看这个模板:

https://github.com/bmoore-msft/AzureRM-Samples/blob/master/VMDSCInstallFile/azuredeploy.json

DSC 分机上有一个 属性 名为:

              "forceUpdateTag" : "changeThisToEnsureScriptRuns-maxlength=50",

如果您希望再次扩展到 运行,属性 值必须不同。因此,例如,如果您希望每次使用随机数或 guid 为它播种时 运行。如果您想以某种方式对其进行版本控制,也可以使用版本号。重点是,如果模板中的值与您传入的值相同,则扩展程序不会再次 运行。

该示例使用 VM,但 VMSS 语法应该相同。 属性 也适用于其他扩展(例如自定义脚本)。

看起来奇怪的部分是你说你删除了整个 RG 并且无法让它接受新包......这听起来很糟糕(即像一个错误)。如果上述方法不能解决问题,我们可能需要更深入地研究模板和脚本。 LMK...