如何使用Terraform在现有Azure VNet环境中自动化部署Windows虚拟机
使用Terraform部署适配现有Azure VNet的Windows虚拟机
以下是直接可用的Terraform配置方案,适配你已有的Azure VNet环境:
核心配置思路
- 通过**数据块(data)**引用已存在的VNet和子网,避免重复创建网络资源
- 创建绑定到现有子网的网络接口(NIC)
- 将Windows虚拟机关联到该NIC,完成网络适配
完整Terraform配置示例
# 配置Azure Provider terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.0" } } } provider "azurerm" { features {} } # 引用已存在的VNet data "azurerm_virtual_network" "existing_vnet" { name = "你的现有VNet名称" resource_group_name = "你的VNet所在资源组名称" } # 引用已存在的子网 data "azurerm_subnet" "existing_subnet" { name = "你的现有子网名称" virtual_network_name = data.azurerm_virtual_network.existing_vnet.name resource_group_name = data.azurerm_virtual_network.existing_vnet.resource_group_name } # 创建网络接口(NIC),绑定到现有子网 resource "azurerm_network_interface" "vm_nic" { name = "win-vm-nic" location = data.azurerm_virtual_network.existing_vnet.location resource_group_name = data.azurerm_virtual_network.existing_vnet.resource_group_name ip_configuration { name = "internal" subnet_id = data.azurerm_subnet.existing_subnet.id private_ip_address_allocation = "Dynamic" # 如果需要公网IP,取消下面注释并配置 # public_ip_address_id = azurerm_public_ip.vm_pip.id } } # 可选:如果需要公网IP,取消下面注释 # resource "azurerm_public_ip" "vm_pip" { # name = "win-vm-pip" # location = data.azurerm_virtual_network.existing_vnet.location # resource_group_name = data.azurerm_virtual_network.existing_vnet.resource_group_name # allocation_method = "Dynamic" # } # 创建Windows虚拟机 resource "azurerm_windows_virtual_machine" "win_vm" { name = "win-vm-example" resource_group_name = data.azurerm_virtual_network.existing_vnet.resource_group_name location = data.azurerm_virtual_network.existing_vnet.location size = "Standard_D2s_v3" admin_username = "adminuser" admin_password = "你的安全密码(请勿硬编码,建议用变量或Key Vault)" network_interface_ids = [azurerm_network_interface.vm_nic.id] os_disk { caching = "ReadWrite" storage_account_type = "Premium_LRS" } source_image_reference { publisher = "MicrosoftWindowsServer" offer = "WindowsServer" sku = "2022-Datacenter" version = "latest" } }
关键配置说明
数据块引用现有资源
data "azurerm_virtual_network"和data "azurerm_subnet"用于查询你已创建的VNet和子网,需替换name和resource_group_name为实际值- 确保Terraform有权限读取这些资源(通过Azure认证)
网络接口配置
- 必须将
subnet_id指向已存在的子网ID,确保VM加入目标网络 - 如果需要远程访问VM,可配置公网IP(取消示例中相关注释)
- 必须将
Windows VM配置
admin_password建议使用Terraform变量或Azure Key Vault存储,避免硬编码敏感信息source_image_reference指定了Windows Server 2022镜像,可根据需求替换SKU(如2019-Datacenter)
部署步骤
- 将上述配置保存为
main.tf - 初始化Terraform:
terraform init - 预览执行计划:
terraform plan - 确认无误后部署:
terraform apply
验证部署
部署完成后,可通过Azure门户检查VM是否关联到目标VNet,或使用Azure CLI命令:
az vm show --resource-group 你的资源组名称 --name win-vm-example --query 'networkProfile.networkInterfaces[0].id'
内容的提问来源于stack exchange,提问作者Shyam Sundhar
相关产品推荐
相关产品推荐

