如何在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
相关产品推荐
相关产品推荐

