运行 已部署的规模集实例上的自定义脚本扩展
Running custom script extension on deployed scale set instances
目前,作为我们软件解决方案的一部分,我在我的 azure 虚拟机服务器上按需使用 运行 脚本的自定义脚本扩展,我们的其他开发团队正在将应用程序移动到规模集,我没有不再能够按需将自定义脚本扩展部署到规模集实例。我为规模集实例上的 运行ning 自定义脚本扩展找到的唯一解决方案是用它重新配置部署模板,这种方法对我不利,因为脚本应该 运行 按需并且是经常更改并且每次都更新模板是不好的做法。
是否可以像在常规虚拟机上一样按需在规模集实例上配置自定义脚本扩展?
在 vm 上定期按需脚本部署的 powershell 示例:
Set-AzureRmVMCustomScriptExtension -ResourceGroupName myResourceGroup `
-VMName myVM `
-Location myLocation `
-FileUri myURL `
-Run 'myScript.ps1' `
-Name DemoScriptExtension
Is there anyway to configure custom script extension on scale set
instances on demand like on regular virtual machines?
目前,Azure 不支持此功能。
我们只能在配置时使用 VMSS 自定义脚本来安装软件。
更多关于VMSS扩展的信息,请参考这个link。
我使用 PowerShell 和 ARM JSON 模板找到了解决此问题的方法(我使用的是 Powershell 版本 5.1
)。在 json 模板的 virtualMachineProfile
下的 commandToExecute
中,指定一个几乎总是更改的值,它会强制命令在每次部署模板时重新执行到 运行 .您会在我的模板中看到我添加的:' -Date ', deployment().name
到 commandToExecute
。 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]"
}
}
},
这将允许您更新已部署的虚拟机规模集上的自定义脚本扩展。希望对您有所帮助!
目前,作为我们软件解决方案的一部分,我在我的 azure 虚拟机服务器上按需使用 运行 脚本的自定义脚本扩展,我们的其他开发团队正在将应用程序移动到规模集,我没有不再能够按需将自定义脚本扩展部署到规模集实例。我为规模集实例上的 运行ning 自定义脚本扩展找到的唯一解决方案是用它重新配置部署模板,这种方法对我不利,因为脚本应该 运行 按需并且是经常更改并且每次都更新模板是不好的做法。
是否可以像在常规虚拟机上一样按需在规模集实例上配置自定义脚本扩展?
在 vm 上定期按需脚本部署的 powershell 示例:
Set-AzureRmVMCustomScriptExtension -ResourceGroupName myResourceGroup `
-VMName myVM `
-Location myLocation `
-FileUri myURL `
-Run 'myScript.ps1' `
-Name DemoScriptExtension
Is there anyway to configure custom script extension on scale set instances on demand like on regular virtual machines?
目前,Azure 不支持此功能。
我们只能在配置时使用 VMSS 自定义脚本来安装软件。
更多关于VMSS扩展的信息,请参考这个link。
我使用 PowerShell 和 ARM JSON 模板找到了解决此问题的方法(我使用的是 Powershell 版本 5.1
)。在 json 模板的 virtualMachineProfile
下的 commandToExecute
中,指定一个几乎总是更改的值,它会强制命令在每次部署模板时重新执行到 运行 .您会在我的模板中看到我添加的:' -Date ', deployment().name
到 commandToExecute
。 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]"
}
}
},
这将允许您更新已部署的虚拟机规模集上的自定义脚本扩展。希望对您有所帮助!