当前位置: 首页 > 知识库问答 >
问题:

为虚拟机部署禁用Azure资源管理器模板中的Windows更新

潘青青
2023-03-14

我想为基于ARM模板的VM部署禁用“Windows更新”。我在最近的Microsoft中找到了相关设置enableAutomaticUpdate。计算提供程序架构。但我没有找到使用此设置的任何ARM模板。我搜索了几个与Windows VM部署相关的Azure快速入门模板——但没有一个打算在预配时控制Windows更新服务的行为。我知道CLASSIC部署模型可用的选项,但我正在明确寻找使用Azure资源管理器部署模型的解决方案。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",

...

{
  "apiVersion": "2015-06-15",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('vmLocation')]",
  "tags": {
    "displayName": "VirtualMachine"
  },
  "dependsOn": [
    "[concat('Microsoft.Storage/storageAccounts/', parameters('vmStorageAccountName'))]",
    "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],
  "properties": {
    "hardwareProfile": {
      "vmSize": "[parameters('vmSize')]"
    },
    "osProfile": {
      "computerName": "[parameters('vmName')]",
      "adminUsername": "[parameters('adminUsername')]",
      "adminPassword": "[parameters('adminPassword')]"
    },
    "windowsConfiguration": {
      "enableAutomaticUpdates": false        
    },
    ...

我试图在现有ARM模板中使用属性windowsConfiguration导致部署失败,并显示此错误消息(在Azure门户中显示)。

在“Properties”类型的对象上找不到成员“windowsConfiguration”。路径的属性。windowsConfiguration’,第1行,位置259。(代码:BadRequest)

当我将Microsoft. Compute升级到版本2015-08-01,尝试引用包含配置属性enableAutomaticUpdate架构时,VM部署失败并出现此错误消息。显然我做错了什么。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",

...

{
  "apiVersion": "2015-08-01",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[parameters('vmLocation')]",
  "tags": {
    "displayName": "VirtualMachine"
  },
  "dependsOn": [
    "[concat('Microsoft.Storage/storageAccounts/', parameters('vmStorageAccountName'))]",
    "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],
  "properties": {
    "hardwareProfile": {
      "vmSize": "[parameters('vmSize')]"
    },
    "osProfile": {
      "computerName": "[parameters('vmName')]",
      "adminUsername": "[parameters('adminUsername')]",
      "adminPassword": "[parameters('adminPassword')]"
    },
    "windowsConfiguration": {
      "enableAutomaticUpdates": false        
    },
    ...

未找到用于位置“西欧”和类型“虚拟机”的API版本“2015-08-01”的注册资源提供商。支持的api版本是“2015-05-01-preview,2015-06-15, 2016-03-30”。支持的位置是“eastus, eastus2, Westus, centalus, northcentalus, southcentalus, northeurope, westeurope, eastasia, southeastasia, Japan anEast, Japan anWest, Australia aliaEast, Australia aliasou东北,巴西南部”。(代码:未注册提供商找到)

我想了解一些关于如何编写ARM模板的指导,这些模板使用Azure Compute Provider架构版本2015-08-01在设置时禁用Windows更新。我的NET解决方案使用Azure SDK 2.7.1。

共有2个答案

钮才哲
2023-03-14

查看上面的错误消息,您将位置传递为“West Europe”,而它应该是“westeurope”。区域名称应以小写形式传递。

您可以使用JSON模板中的以下行“位置”来使用资源组的位置:“[resourceGroup()。位置]”这将是更好的做法。

韦正业
2023-03-14

我非常接近解决方案。我只是误解了模式。根据架构的这一部分,Windows配置是osProfile的一部分。如果ARM模板是这样编写的,Azure资源管理器就会理解我想要什么,并在资源调配时禁用AutomaticUpdates。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",

...

{
  "apiVersion": "2015-06-15",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[parameters('vmName')]",
  "location": "[resourceGroup().location]",
  "tags": {
    "displayName": "VirtualMachine"
  },
  "dependsOn": [
    "[concat('Microsoft.Storage/storageAccounts/', parameters('vmStorageAccountName'))]",
    "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],
  "properties": {
    "hardwareProfile": {
      "vmSize": "[parameters('vmSize')]"
    },
    "osProfile": {
      "computerName": "[parameters('vmName')]",
      "adminUsername": "[parameters('adminUsername')]",
      "adminPassword": "[parameters('adminPassword')]",
      "windowsConfiguration": {
        "enableAutomaticUpdates": false        
      }
    },
    ...

Azure Portal中不可思议的工具资源浏览器显示了给定资源的当前配置。如您所见,EnableAutomaticUpdates设置为false。

{
    "properties": {
        "vmId": "10400cdd-26be-4be4-99d8-2d5c22d96911",
        "hardwareProfile": {
            "vmSize": "Standard_D2"
        },
        "storageProfile": {
            "imageReference": {
                "publisher": "MicrosoftWindowsServer",
                "offer": "WindowsServer",
                "sku": "2012-R2-Datacenter",
                "version": "latest"
            },
            "osDisk": {
                "osType": "Windows",
                "name": "osdisk",
                "createOption": "FromImage",
                "vhd": {
                    "uri": "this_is_not_for_public_use"
                },
                "caching": "ReadWrite"
            },
            "dataDisks": []
        },
        "osProfile": {
            "computerName": "this_is_not_for_public_use",
            "adminUsername": "this_is_not_for_public_use",
            "windowsConfiguration": {
                "provisionVMAgent": true,
                "enableAutomaticUpdates": false
            },
            "secrets": []
        },
        "networkProfile": {
            "networkInterfaces": [
                {
                    "id": "this_is_not_for_public_use/providers/Microsoft.Network/networkInterfaces/ComputeNode15-Nic"
                }
            ]
        },
        "provisioningState": "Creating"
    },
    "id": "this_is_not_for_public_use/providers/Microsoft.Compute/virtualMachines/this_is_not_for_public_use",
    "name": "this_is_not_for_public_use",
    "type": "Microsoft.Compute/virtualMachines",
    "location": "westeurope",
    "tags": {
        "displayName": "VirtualMachine"
    }
}

我更改了模板以使用资源组的位置—在大多数情况下,这是一个有用的选项。感谢Martyn C提供的提示和宝贵的反馈,将我推向了正确的方向。

 类似资料:
  • 我正在处理ARM模板并需要执行条件部署。例如,我在变量“子网”中定义了两个网络安全组。 网络安全组nsg_bastion1需要使用预设规则进行特殊处理,因为它是Azure Bastion子网的网络安全组。nsg_client1将分配一些自定义规则,此时这些规则并不重要。 为了区分非堡垒和堡垒网络安全组,我创建了两个条件资源块: 条件属性检查子网是否称为“AzureBastionSubnet”。我已

  • 当部署模板验证失败时,我的代码中出现了一个错误:行105和列9处的模板资源myVMć无效:模板函数reourceId无效。使用详情请看https://aka.ms/arm-template-expressions。使用详情请见https://aka.ms/arm-template-expressions。(代码:InvalidTemboard)。 我已经尝试解决这个错误但我不会 } 结果是,这将使

  • 最近我开始创建一个新的资源组,但它似乎被困在配置服务器场资源上。重新启动部署会输出以下错误: 我没有时间等待它的到期。有没有办法取消Azure ARM部署?

  • 用户管理是使虚拟资源能派上用场的另一个很好的例子。考虑下面的设置。 你有三个用户:John、Graham 和 Steven。为了简化管理大量主机,你为两种类型的用户定义了类: developers 和 sysadmins。每个机器都需要包含 sysadmins,但只有一部分机器允许 developer 访问: node server { include user::sysadmins } n

  • 我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.

  • 熟悉使用 Vagrant 管理虚拟机的流程。 查看状态 如果你已经登录到了虚拟机上,先退出来。在命令行下看到下面提示符就表示你已经登录到虚拟机上了: [[email protected] ~]$ 输入命令: exit 应该会返回: logout Connection to 127.0.0.1 closed. 现在你的位置应该是在项目的根目录下面,先查看一下虚拟机的状态: vagrant st