Azure微软云企业账号:利用Bicep / Terraform 10分钟在Azure上一键部署标准网络环境

cloud 2026-06-01 阅读 4
cloud

在现代云计算运维中,有一个非常经典的“新兵连”式翻车现场:

公司的架构师辛辛苦苦设计了一套符合安全规范的网段方案,交由运维去实施。结果运维登录 Azure 门户网站控制台,面对密密麻麻的表单,一边肉眼核对一边点鼠标。半小时点下来,不小心把主网段的 /16 错打成了 /24,或者把网络安全组(NSG)的入站规则顺序配颠倒了。结果就是:后续部署的虚拟机不是彻底失联,就是把核心数据库直接暴露给了公网,排查原因还得再花掉大半天。

这种纯靠人肉在网页上“指点江山”的运维方式,在业内被称为“手工推土机”。它不仅效率低下,最致命的是完全无法复制。如果你需要把同一套环境在测试、预发、生产环境各自克隆一份,你很难保证自己点上百次鼠标却不出一次错。

为了彻底终结这种低效且高危的作坊式运维,基础设施即代码(IaC,Infrastructure as Code)應運而生。在微软云(Azure)的生态里,有两大统治级的 IaC 编程武器:一个是微软亲儿子 Bicep(现代声明式 DSL 语言),另一个是业界老牌标配 Terraform。

它们的底层逻辑极其硬核:用写代码的方式去“画”你的网络拓扑。 你只需要写一个小小的文本文件,里面定义好你需要什么。然后一行命令推向云端,Azure 的自动化编排大脑就会在 1 分钟内,像素级无差错地为你平地起高楼,瞬间生出一套符合大厂标准的基础网络环境。

今天我们拒绝任何无聊的概念堆砌,直接进入硬核的实战对抗。我们将分别用 BicepTerraform 这两个流派,手把手带你用一套标准代码,10分钟在云端焊死一套包含“1个VNet(虚拟网络) + 2个独立子网 + 1个高防网络安全组”的标准企业级地基网络。

第一阶段:深度拆解,标准网络的“三维立体模型”

在动手写代码之前,你必须在脑子里把我们要部署的基础网络物理拓扑彻底理清楚。一套及格的企业级 Azure 网络地基,绝不是简单开一个 VNet 就完事了,它必须满足最基础的隔离架构:

  1. 虚拟网络大底盘(Virtual Network, VNet): 这是你在 Azure 上的专属独立王国,与外界公网物理隔离。我们将其网段规划为标准的大厂内网段:10.0.0.0/16。
  2. 前后端独立子网(Subnets): 大底盘内部必须横向切出两块阵地,各司其职,物理隔离:Web 前端子网(Subnet-Frontend):划分网段为 10.0.1.0/24,未来专门用来挂载公开的 Web 应用或负载均衡器。DB 后端子网(Subnet-Backend):划分网段为 10.0.2.0/24,未来专门存放核心数据库或敏感的后端业务,断绝外网直接访问。
  3. 高防看门大爷:网络安全组(Network Security Group, NSG): 这是一道死死卡在子网入口处的分布式防火墙。我们要写死一条安全钢印规则:只允许公网的 443(HTTPS)和 80(HTTP)流量进入前端子网,其余一切牛鬼蛇神直接就地物理拦截。

第二阶段:流派一——微软亲儿子 Bicep 闪电战

如果你是一个纯粹的微软全家桶团队,完全不需要去装第三方的配置工具。Azure 命令行工具(Azure CLI)原生就 100% 懂 Bicep。它没有任何繁琐的状态文件(State File)需要维护,语法干净得像一汪清水。

在本地电脑上,新建一个名为 main.bicep 的文件,把下面这套千锤百炼的高清生产模板直接贴进去:

// 1. 定义全局静态参数,方便未来一键改名

param location string = resourceGroup().location

param vnetName string = 'vnet-core-prod'

param nsgName string = 'nsg-web-firewall'


// 2. 拔地而起:架设看门大爷(网络安全组)

resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-01' = {

 name: nsgName

 location: location

 properties: {

   securityRules: [

     {

       name: 'Allow-HTTPS-Inbound'

       properties: {

         priority: 100 // 优先级最高

         protocol: 'Tcp'

         access: 'Allow'

         direction: 'Inbound'

         sourceAddressPrefix: '*' // 来自全球任何地方

         sourcePortRange: '*'

         destinationAddressPrefix: '*'

         destinationPortRange: '443' // 精准放行 443 高防端口

       }

     }

   ]

 }

}


// 3. 乾坤大挪移:创建大底盘虚拟网络,并切出两块子网,同时把大爷捆绑在前端子网上

resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {

 name: vnetName

 location: location

 properties: {

   addressSpace: {

     addressPrefixes: [

       '10.0.0.0/16' // 核心大网段

     ]

   }

   subnets: [

     {

       name: 'Subnet-Frontend'

       properties: {

         addressPrefix: '10.0.1.0/24' // 前端阵地

         networkSecurityGroup: {

           id: nsg.id // 将刚才的 NSG 防火墙直接拍在这个子网上

         }

       }

     }

     {

       name: 'Subnet-Backend'

       properties: {

         addressPrefix: '10.0.2.0/24' // 后端数据库隐秘阵地

       }

     }

   ]

 }

}

30 秒一键升空指令(Bicep)

打开你本地终端,登录你的 Azure 账号,并指定一个你建好的资源组(例如 rg-infra-prod),直接敲下这行不可思议的简短指令:

Bash


az deployment group create --resource-group rg-infra-prod --template-file main.bicep

敲完回车,双手离开键盘。你会看到终端里的进度条闪烁。大约 20 秒后,控制台会给你返回一串密密麻麻的 JSON 成功报告。

此时如果你登录 Azure 网页后台去刷新一下,你会发现 VNet 已经整整齐齐地躺在那里,两个子网和 NSG 绑定得滴水不漏,格式和代码里规划的像素点完全一致。

第三阶段:流派二——业界不老松 Terraform 工业级闭环

如果你们公司是多云架构,除了 Azure 还要管 AWS 或阿里云,那么业界公认的工业级白金标准,依然是 HashiCorp 家族的 Terraform

在本地电脑上,新建一个空目录,在里面建一个名为 main.tf 的文件。Terraform 采用的是经典的 HCL 语法,逻辑稍微厚重,但由于带有强大的状态锁机制,在大团队协同协作中稳如泰山:# 1. 声明接头暗号:我们要调用微软 Azure 的官方驱动(Provider)

terraform {

 required_providers {

   azurerm = {

     source  = "hashicorp/azurerm"

     version = "~> 3.0"

   }

 }

}


provider "azurerm" {

 features {} # 必须显式声明开启特性

}


# 2. 圈地:声明我们要把网络种在哪个已有的资源组里

data "azurerm_resource_group" "core_rg" {

 name = "rg-infra-prod"

}


# 3. 铸造盾牌:创建高防网络安全组(NSG)

resource "azurerm_network_security_group" "web_nsg" {

 name                = "nsg-web-firewall"

 location            = data.azurerm_resource_group.core_rg.location

 resource_group_name = data.azurerm_resource_group.core_rg.name


 security_rule {

   name                       = "Allow-HTTPS-Inbound"

   priority                   = 100

   direction                  = "Inbound"

   access                     = "Allow"

   protocol                   = "Tcp"

   source_port_range          = "*"

   destination_port_range     = "443"

   source_address_prefix      = "*"

   destination_address_prefix = "*"

 }

}


# 4. 开辟大底盘:创建虚拟网络(VNet)

resource "azurerm_virtual_network" "core_vnet" {

 name                = "vnet-core-prod"

 location            = data.azurerm_resource_group.core_rg.location

 resource_group_name = data.azurerm_resource_group.core_rg.name

 address_space       = ["10.0.0.0/16"]

}


# 5. 精准切分:手动切出前端子网并与 NSG 绑定

resource "azurerm_subnet" "sub_frontend" {

 name                 = "Subnet-Frontend"

 resource_group_name  = data.azurerm_resource_group.core_rg.name

 virtual_network_name = azurerm_virtual_network.core_vnet.name

 address_prefixes     = ["10.0.1.0/24"]

}


resource "azurerm_subnet_network_security_group_association" "bind_nsg" {

 subnet_id                 = azurerm_subnet.sub_frontend.id

 network_security_group_id = azurerm_network_security_group.web_nsg.id

}


# 6. 精准切分:手动切出纯内网后端子网

resource "azurerm_subnet" "sub_backend" {

 name                 = "Subnet-Backend"

 resource_group_name  = data.azurerm_resource_group.core_rg.name

 virtual_network_name = azurerm_virtual_network.core_vnet.name

 address_prefixes     = ["10.0.2.0/24"]

}

三板斧一键落地指令(Terraform)

打开终端,切换到 main.tf 所在的目录下,依次敲入经典的“泰拉轰三板斧”:

Bash


# 第一斧:初始化,下载微软官方最新网络组件驱动包
terraform init

# 第二斧:彩排演习,让 Terraform 在不花钱的情况下,先给你肉眼盘点一遍等会儿会建出什么东西
terraform plan

# 第三斧:总攻开始,真正向云端发起基础设施冲锋(加 --auto-approve 免去人肉敲 yes 确认)
terraform apply --auto-approve

不到 30 秒,终端就会亮出绿色的 Apply complete! Resources: 4 added。整套标准大厂级隔离网络环境,便完美在 Azure 的云端物理世界里破土落地。

第四阶段:工业级基础设施即代码的避坑血泪史

利用这两套代码,你基本可以傲视所有还在网页上苦苦点鼠标的传统传统网管。但要在真正严苛的商业高并发、DevOps 流水线里活下来,作为首席架构师,你必须立刻给团队焊死以下两条底线避坑规范:

1. 致命的“Terraform 状态文件丢失”惨剧(State Lock)

如果你用的是 Terraform,当你执行完 terraform apply 后,本地目录里会悄悄生出一个名为 terraform.tfstate 的文本文件。

  • 灾难隐患:这个文件是 Terraform 记住当前云端网络长什么样的“唯一记忆大脑”。如果别的开发在他们自己的电脑上也去跑这段代码,由于他们本地没有你这个 tfstate 文件,Terraform 就会变成盲人,误以为云端什么都没有,从而在执行 apply 的瞬间,把你在云端建好的生产网络、连带里面的虚拟机,全部无情地连根拔起并物理擦除!
  • 大厂标准免死金牌配置:严禁把 tfstate 留存在本地电脑上!必须在 terraform { ... } 块里配置 backend "azurerm" 策略。强行把这个状态记忆文件,锁死锁在 Azure 官方的一个加密 Storage Account(存储账户 Blob) 里,并且开启状态锁(State Locking)。这样,全球任何人在任何角落跑代码,都会去同一个中心大脑里对齐数据,彻底焊死“覆盖与误删”的惨剧。

2. 警惕 Bicep 里“硬编码(Hardcode)”导致的跨地域瘫痪

在写 Bicep 代码时,很多新手为了图省事,会直接在代码里写死 location: 'eastasia'(香港)。

  • 原因拆解:如果有一天,公司业务突然要出海美国,你需要把整套一模一样的隔离网络在 eastus(美东机房)也克隆一套。你一执行这行代码,系统会无情地报错,因为你的资源组明明建在美国,代码却强行命令微软把网络网络拉在香港。
  • 硬核规避指南:永远利用参数动态抓取地缘。正如我们上面 Bicep 示范模板的写法:param location string = resourceGroup().location。让代码自己去聪明地打听“自己当前被种在哪个资源组里”,资源组在哪,它就自动顺藤摸瓜在哪落地,实现真正意义上的一套模板、全球无缝克隆。

总结

利用 Bicep / Terraform 实行现代化基础设施即代码(IaC)部署,核心的工业级精髓其实简化为十六个字:拓扑落码,版本控制,中心存态,动态地缘。

你彻底告别了过去天天核对参数、提心吊胆怕网段配错、深夜人肉在控制台点上百次鼠标的原始原始运维状态。把所有最核心的数字资产地基,完全固化成一段可以提交到 GitHub 的文本代码。坐在电脑前,优雅地改一个数字,一个回车,剩下的高防和扩容重任,放心地交给光速闪烁的云原生时代。


cloud
← 返回新闻中心