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

如何使用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"
  }
}

关键配置说明

  1. 数据块引用现有资源

    • data "azurerm_virtual_network" 和 data "azurerm_subnet" 用于查询你已创建的VNet和子网,需替换name和resource_group_name为实际值
    • 确保Terraform有权限读取这些资源(通过Azure认证)
  2. 网络接口配置

    • 必须将subnet_id指向已存在的子网ID,确保VM加入目标网络
    • 如果需要远程访问VM,可配置公网IP(取消示例中相关注释)
  3. Windows VM配置

    • admin_password建议使用Terraform变量或Azure Key Vault存储,避免硬编码敏感信息
    • source_image_reference指定了Windows Server 2022镜像,可根据需求替换SKU(如2019-Datacenter)

部署步骤

  1. 将上述配置保存为main.tf
  2. 初始化Terraform:
    terraform init
    
  3. 预览执行计划:
    terraform plan
    
  4. 确认无误后部署:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:37:45