删除 VM 是自定义脚本在 Azure 资源管理器模板中失败

Delete VM is custom script fails in azure resource manager templat

我正在使用 Azure 资源管理器模板在 Azure 中部署 VM。我有一个在 VM 启动后运行的自定义脚本。脚本会运行,即使脚本失败,VM 也会保持运行。如果自定义脚本失败,有没有办法拆除虚拟机?

  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.0",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "[uri(parameters('_artifactsLocation'), concat('scripts/copyfilefromazure.sh', parameters('_artifactsLocationSasToken')))]"
      ]
    },
    "protectedSettings": {
      "commandToExecute": "[concat('bash ', variables('scriptFileName'), ' ', variables('scriptArgs'))]"
    }

根据您的要求,您需要了解模板部署进度的顺序。

当您创建带有扩展名的 VM 时。它会先创建虚拟机,然后在虚拟机中执行虚拟机扩展。因此,无论 VM 扩展执行失败还是成功。 VM 已经 运行。而且恐怕没有适合您的功能,如果自定义扩展失败,模板会自行删除所有资源。据我所知,Azure 模板无法删除资源。

所以我认为一个合适的解决方案是创建一个脚本来检查 VM 扩展是否成功执行,如果没有,则使用 CLI 命令删除扩展 az vm extension delete (I assume you use the Azure CLI). Then install the VM extension again with the CLI command az vm extension set