微软云国际版 使用Terraform部署Azure虚拟机
引言:当Terraform遇上Azure,一场云上搭积木的冒险
在云计算的世界里,手动点击界面创建虚拟机?那简直是用算盘做微积分!今天,咱们就来聊聊怎么用Terraform在Azure上轻松部署虚拟机。别被“Infrastructure as Code”这术语吓到,Terraform其实就是个云服务界的“乐高大师”,用代码把虚拟机、网络、存储这些积木块拼起来,既快又准,还省心。
为什么选择Terraform?
想象一下,每次部署都需要登录Azure Portal,点击按钮,填表单,选区域,选机型,配置网络……手都点酸了还没完。更糟糕的是,如果同事也这么操作,可能配置不一致,结果半夜出问题找半天。Terraform用声明式代码统一管理,写一次配置,到处部署。改需求?改代码,重新apply,瞬间搞定。而且,Terraform支持多云,今天用Azure,明天用AWS,配置代码改改就行,不换脑子。
Azure的“积木”特性
Azure的资源都是模块化的,虚拟机、网络、存储都是独立组件。Terraform把它们拆成一个个小积木,按你的设计拼起来。比如先创建资源组,再在组里建虚拟网络,子网,安全组,最后把虚拟机挂上去。每个组件都清晰明了,出问题也好排查。比如网络不通?检查子网和安全组配置,一目了然。
准备工作:搭好舞台,演员就位
安装Terraform
安装Terraform?超简单!Mac用户打开终端,敲个brew install terraform,几秒搞定;Windows用户直接去官网下个安装包,双击下一步;Linux用户用apt install terraform或yum install terraform,分分钟搞定。比泡个方便面还快,连水都没烧开呢,工具就装好了。
Azure账号和权限配置
要让Terraform操作Azure,得先配个“专属小秘书”——服务主体。用Azure CLI执行:az ad sp create-for-rbac --role Contributor --scopes /subscriptions/your-subscription-id。这条命令会生成一个appId、password、tenantId,记下来!这就像给快递员配了门禁卡,但得先告诉门卫“这个快递员可以进”。如果权限不够,Terraform只能在门口转圈,啥也干不了。建议给最小权限,比如“虚拟机参与者”和“网络参与者”,别一股脑全给,安全第一。
实战:用Terraform构建你的第一台Azure VM
编写Terraform配置文件
创建文件main.tf,写上:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "example" {
name = "myResourceGroup"
location = "East US"
}
resource "azurerm_virtual_network" "example" {
name = "myVirtualNetwork"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
resource "azurerm_subnet" "example" {
name = "mySubnet"
resource_group_name = azurerm_resource_group.example.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefixes = ["10.0.2.0/24"]
}
resource "azurerm_network_interface" "example" {
name = "myNIC"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.example.id
private_ip_address_allocation = "Dynamic"
}
}
resource "azurerm_public_ip" "example" {
name = "myPublicIP"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
allocation_method = "Dynamic"
}
resource "azurerm_linux_virtual_machine" "example" {
name = "myVM"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
network_interface_ids = [azurerm_network_interface.example.id]
size = "Standard_B1s"
admin_username = "azureuser"
admin_ssh_key {
username = "azureuser"
public_key = file("~/.ssh/id_rsa.pub")
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "18.04-LTS"
version = "latest"
}
}
微软云国际版 仔细看,每个资源都像搭积木,resource "azurerm_resource_group" "example"创建资源组,后面引用它的属性用azurerm_resource_group.example.location,像乐高卡口对齐。虚拟机配置里指定了SSH密钥,记得提前生成好,别忘了文件路径对。
初始化与规划
在项目目录下执行terraform init,初始化会下载Azure provider插件。接着terraform plan,这时候Terraform会展示计划:要创建哪些资源,每个资源的参数。这是关键步骤!比如发现地址空间写错了,或者网络配置冲突,趁现在修改。Terraform会告诉你:“这里有个问题,先别动手。”就像检查图纸,确保所有零件都对得上再开工。
应用部署,见证奇迹
确认plan没问题后,terraform apply。Terraform会问“Are you sure?”,输入yes。几秒后,所有资源在Azure上创建完成!打开Azure Portal,资源组里看到新建的虚拟机、网络、IP等,像变魔术一样。这时候可以SSH登录:ssh azureuser@<公共IP>,试试看,是不是秒连?
常见问题与避坑指南
权限不足?可能是RBAC没配对
报错“permissions denied”?先检查服务主体的角色。比如创建虚拟机需要“Virtual Machine Contributor”角色,如果只给了“Contributor”,可能有些操作受限。用az role assignment list看看权限,或者直接去Azure Portal的“访问控制(IAM)”里查。记得权限给够但别过量,安全第一。
资源命名冲突的尴尬
“The name ‘myVM’ is already in use”?Azure的资源名称必须全局唯一,不只是你的订阅,整个Azure都可能有重名。别偷懒用“myvm”“testvm”这种通用名,用项目前缀+环境+序号,比如“prod-app-vm01”。Terraform的random_string资源可以帮你生成唯一后缀,比如:
resource "random_string" "suffix" {
length = 4
special = false
upper = false
}
resource "azurerm_linux_virtual_machine" "example" {
name = "myvm-${random_string.suffix.result}"
...
}
这样每次部署都带随机4位字母,保证唯一,再也不会撞车了。
状态文件混乱
Terraform用terraform.tfstate记录资源状态。如果多人合作,记得用远程状态存储,比如Azure Blob Storage。否则,本地文件一删,Terraform就傻眼了,以为资源不存在,下次apply可能全删掉重建!用terraform state list可以查看当前管理的资源,避免误操作。
总结:云上搭积木的快乐
用Terraform管理Azure资源,就像在玩积木,但比真积木更灵活。写代码定义环境,一键部署,改配置只需改代码。再也不用担心手误点错,或者同事配置不一致。从开发到生产,环境一致,安全可靠。下次有人问“怎么部署虚拟机”,你可以优雅地说:“写几行代码,点个apply,搞定!” 从此,云上搭建不再是头疼事,而是件有趣的小游戏。


