1

目前,作为我们软件解决方案的一部分,我正在使用自定义脚本扩展在我的 azure vm 服务器上按需运行脚本,我们的其他开发团队正在将应用程序移动到规模集,我不再能够按需部署自定义脚本扩展到规模集实例。我发现在规模集实例上运行自定义脚本扩展的唯一解决方案是使用它重新配置部署模板,这种方法对我不利,因为脚本应该按需运行并且经常更改并且每次都更新模板是不好的做法。

无论如何,是否可以像在常规虚拟机上一样按需在规模集实例上配置自定义脚本扩展?

在 vm 上进行常规按需脚本部署的 powershell 示例:

Set-AzureRmVMCustomScriptExtension -ResourceGroupName myResourceGroup `
-VMName myVM `
-Location myLocation `
-FileUri myURL `
-Run 'myScript.ps1' `
-Name DemoScriptExtension
4

2 回答 2

5

我使用 PowerShell 和 ARM JSON 模板找到了解决方法(我使用的是 Powershell 版本5.1)。在您commandToExecutevirtualMachineProfilejson 模板中,指定一个几乎总是更改的值,它将强制命令在每次部署模板时重新执行以运行。您将在我的模板中看到我添加:' -Date ', deployment().namecommandToExecute. 的值deployment().name在我的New-AzureRmResourceGroupDeployment命令中指定为:

-Name $($(Get-Date -format "MM_dd_yyyy_HH_mm"))

部署名称基于日期和时间,每分钟不同。

PowerShell 命令:

New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroupName -TemplateFile $PathToJsonTemplate -TemplateParameterFile $PathToParametersFile -Debug -Name $($(Get-Date -format "MM_dd_yyyy_HH_mm")) -force

我的脚本中的自定义脚本扩展部分virtualMachineProfile如下所示(注意commandToExecute):

"virtualMachineProfile": {
                    "extensionProfile": {
                        "extensions": [
                            {
                                "type": "Microsoft.Compute/virtualMachines/extensions",
                                "name": "MyExtensionName",
                                "location": "[parameters('location')]",
                                "properties": {
                                    "publisher": "Microsoft.Compute",
                                    "type": "CustomScriptExtension",
                                    "typeHandlerVersion": "1.8",
                                    "autoUpgradeMinorVersion": true,
                                    "settings": {
                                        "fileUris": [
                                            "[concat(parameters('customScriptExtensionSettings').storageAccountUri, '/scripts/MyScript.ps1')]"
                                        ],
                                        "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File MyScript.ps1', ' -Date ', deployment().name)]"
                                    },
                                    "protectedSettings": {
                                        "storageAccountName": "[parameters('customScriptExtensionSettings').storageAccountName]",
                                        "storageAccountKey": "[listKeys(variables('accountid'),'2015-05-01-preview').key1]"
                                    }
                                }
                            },

这将允许您更新已部署的虚拟机规模集上的自定义脚本扩展。我希望这有帮助!

于 2019-05-01T21:27:28.163 回答
-1

无论如何,是否可以像在常规虚拟机上一样按需在规模集实例上配置自定义脚本扩展?

目前,Azure 不支持此功能。

我们只能在预配规模集时使用 VMSS 自定义脚本来安装软件

有关 VMSS 扩展的更多信息,请参阅此链接

于 2017-10-18T09:25:50.940 回答