将 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...
我在使用部署模板将 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...