You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure中通过Terraform部署无负载均衡器等组件的VM

如何在Terraform中禁用Azure VM相关的负载均衡器、可用性集和启动诊断组件?

Terraform并没有直接的disabled关键字来禁用资源,你可以通过以下几种简单方法来实现需求:

  • 直接注释/删除不需要的资源块
    这是最直观的方式:把负载均衡器、可用性集、启动诊断对应的存储资源块用#单行注释,或者/* */块注释掉,同时记得删除VM资源中对这些资源的引用(比如availability_set_id = azurerm_availability_set.example.id这种行也要注释或删掉),否则会因为找不到依赖资源报错。

    示例:

    # 注释掉可用性集资源
    # resource "azurerm_availability_set" "example" {
    #   name                = "example-avset"
    #   location            = azurerm_resource_group.example.location
    #   resource_group_name = azurerm_resource_group.example.name
    # }
    
    resource "azurerm_linux_vm" "example" {
      name                = "example-vm"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      # 同时注释掉VM里对可用性集的引用
      # availability_set_id = azurerm_availability_set.example.id
      size                = "Standard_D2s_v3"
      admin_username      = "adminuser"
      admin_password      = "P@ssw0rd123!"
    
      # 禁用启动诊断:直接设置enabled为false
      boot_diagnostics {
        enabled = false
      }
    
      network_interface_ids = [azurerm_network_interface.example.id]
    
      os_disk {
        caching              = "ReadWrite"
        storage_account_type = "Premium_LRS"
      }
    
      source_image_reference {
        publisher = "Canonical"
        offer     = "0001-com-ubuntu-server-jammy"
        sku       = "22_04-lts"
        version   = "latest"
      }
    }
    
  • 用count参数控制资源是否创建
    如果你想保留代码,方便后续随时启用这些组件,可以给目标资源添加count参数,通过变量控制是否创建资源。比如定义一个布尔变量,当变量为false时,资源不会被创建。

    示例:

    # 定义控制变量
    variable "enable_availability_set" {
      type    = bool
      default = false
    }
    
    variable "enable_boot_diagnostics" {
      type    = bool
      default = false
    }
    
    # 可用性集:根据变量决定是否创建
    resource "azurerm_availability_set" "example" {
      count               = var.enable_availability_set ? 1 : 0
      name                = "example-avset"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
    }
    
    resource "azurerm_linux_vm" "example" {
      name                = "example-vm"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      # 只有启用可用性集时才引用,否则设为null
      availability_set_id = var.enable_availability_set ? azurerm_availability_set.example[0].id : null
      size                = "Standard_D2s_v3"
      admin_username      = "adminuser"
      admin_password      = "P@ssw0rd123!"
    
      # 启动诊断通过变量控制启用状态
      boot_diagnostics {
        enabled = var.enable_boot_diagnostics
        # 如果启用,再指定存储账号;禁用的话可以删掉storage_account_uri行
        storage_account_uri = var.enable_boot_diagnostics ? azurerm_storage_account.example.primary_blob_endpoint : null
      }
    
      network_interface_ids = [azurerm_network_interface.example.id]
    
      os_disk {
        caching              = "ReadWrite"
        storage_account_type = "Premium_LRS"
      }
    
      source_image_reference {
        publisher = "Canonical"
        offer     = "0001-com-ubuntu-server-jammy"
        sku       = "22_04-lts"
        version   = "latest"
      }
    }
    
  • 启动诊断的单独处理
    启动诊断不需要删除存储账号(如果只是禁用功能),直接在VM的boot_diagnostics块中设置enabled = false即可,这样就不会启用该功能,也无需引用存储账号。

内容的提问来源于stack exchange,提问作者Azure Wizzard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:13:16