Azure微軟雲企業賬號:利用Bicep / Terraform 10分鐘在Azure上一鍵部署標準網絡環境

雲端 2026-06-01 阅读 10
2

在現代云計算運維中,有一個非常經典的「新兵連」式翻車現場:

公司的架構師辛辛苦苦設計了一套符合安全規範的網段方案,交由運維去實施。 結果運維登錄 Azure 門戶網站控制台,面對密密麻麻的表單,一邊肉眼核對一邊點鼠標。 半小時點下來,不小心把主網段的

/16

錯打成了

/24

,或者把網絡安全組(NSG)的入站規則順序配顛倒了。 結果就是:

後續部署的虛擬機不是徹底失聯,就是把核心數據庫直接暴露給了公網,排查原因還得再花掉大半天。

這種純靠人肉在網頁上「指點江山」的運維方式,在業內被稱為「手工推土機」。 它不僅效率低下,最致命的是

完全無法複製

。 如果你需要把同一套環境在測試、預發、生產環境各自克隆一份,你很難保證自己點上百次鼠標卻不出一次錯。

為了徹底終結這種低效且高危的作坊式運維,基礎設施即代碼(IaC,Infrastructure as Code)應運而生。 在微軟雲(Azure)的生態裡,有兩大統治級的 IaC 編程武器:

一個是微軟親兒子 Bicep(現代聲明式 DSL 語言),另一個是業界老牌標配 Terraform。

它們的底層邏輯極其硬核:

用寫代碼的方式去「畫」你的網絡拓撲。

你只需要寫一個小小的文本文件,裡面定義好你需要什麼。 然後一行命令推向雲端,azure 的自動化編排大腦就會在 1 分鐘內,像素級無差錯地為你平地起高樓,瞬間生出一套符合大廠標準的基礎網絡環境。

今天我們拒絕任何無聊的概念堆砌,直接進入硬核的實戰對抗。 我們將分別用

Bicep

Terraform

這兩個流派,手把手帶你用一套標準代碼,10分鐘在雲端焊死一套包含「1個VNet(虛擬網絡) 2個獨立子網 1個高防網絡安全組」的標準企業級地基網絡。

第一階段:深度拆解,標準網絡的「三維立體模型」

在動手寫代碼之前,你必須在腦子裡把我們要部署的基礎網絡物理拓撲徹底理清楚。 一套及格的企業級 Azure 網絡地基,絕不是簡單開一個 VNet 就完事了,它必須滿足最基礎的隔離架構:

虛擬網絡大底盤(Virtual Network, VNet): 這是你在 Azure 上的專屬獨立王國,與外界公網物理隔離。 我們將其網段規劃為標準的大廠內網段:10.0.0.0/16。

前後端獨立子網(Subnets): 大底盤內部必須橫向切出兩塊陣地,各司其職,物理隔離:We

B 前端子網(Subnet-Frontend):劃分網段為 10.0.1.0/24,未來專門用來掛載公開的 Web 應用或負載均衡器。 DB 後端子網(Subnet-Backend):劃分網段為 10.0.2.0/24,未來專門存放核心數據庫或敏感的後端業務,斷絕外網直接訪問。

高防看門大爺:網絡安全組(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: 10

0 // 優先級最高

Protocol: 'Tcp'

Access: 'Allow'

Direction: 'Inbound'

SourceAddressPrefix: '*' // 來自全球任何地方

SourcePortRange: '*'

DestinationAddressPrefix: '*'

DestinationPortRange: '443' // 精準放行 443 高防端口

}

}

]

}

}

// 3. 乾坤大挪移:創建大底盤虛擬網絡,並切出兩塊子網,同時把大爺捆綁在前端子網上

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

Name: vnetName

位置:位置

屬性:{

AddressSpace: {

AddressPrefixes: [

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

]

}

Subnets: [

{

Name: 'Subnet-Frontend'

屬性:{

AddressPrefix: '10.0.1.0/24' // 前端陣地

NetworkSecurityGroup: {

Id: nsg.id // 將剛才的 NSG 防火牆直接拍在這個子網上

}

}

}

{

Name: 'Subnet-Backend'

屬性:{

AddressPrefix: '10.0.2.0/24' // 後端數據庫隱秘陣地

}

}

]

}

}

30 秒一鍵升空指令(Bicep)

打開你本地終端,登錄你的 Azure 賬號,並指定一個你建好的資源組(例如

Rg-infra-prod

),直接敲下這行不可思議的簡短指令:

貝殼腳本

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

敲完回車,雙手離開鍵盤。 你會看到終端里的進度條閃爍。 大約 20 秒後,控制台會給你返回一串密密麻麻的 JSON 成功報告。

此時如果你登錄 Azure 網頁後台去刷新一下,你會發現 VNet 已經整整齊齊地躺在那裡,兩個子網和 NSG 綁定得滴水不漏,格式和代碼里規劃的像素點完全一致。

第三階段:流派二--業界不老松 Terraform 工業級閉環

如果你們公司是多雲架構,除了 Azure

還要管 AWS 或阿里雲,那麼業界公認的工業級白金標準,依然是 HashiCorp 家族的

Terraform

在本地電腦上,新建一個空目錄,在裡面建一個名為

主設定檔.terraform

的文件。 Terraform 採用的是經典的 HCL 語法,邏輯稍微厚重,但由於帶有強大的狀態鎖機制,在大團隊協同協作中穩如泰山:# 1. 聲明接頭暗號:我們要調用微軟 Azure 的官方驅動(Provider)

Terraform {

所需的提供者 {

Azurerm = {

Source = "hashicorp/azurerm"

版本 = "~>" 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 &nbs

P; = "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 = da

Ta.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 = azu

Rerm_virtual_network.core_vnet.name

Address_prefixes = ["10.0.2.0/24"]

}

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

打開終端,切換到

主設定檔.terraform

所在的目錄下,依次敲入經典的「泰拉轟三板斧」:

貝殼腳本

# 第一斧:初始化,下載微軟官方最新網絡組件驅動包

terraform 初始化

# 第二斧:彩排演習,讓 Terraform 在不花錢的情況下,先給你肉眼盤點一遍等會兒會建出什麼東西

Terraform 計劃

# 第三斧:總攻開始,真正向雲端發起基礎設施衝鋒(加 --auto-approve 免去人肉敲 yes 確認)

Terraform apply --auto-approve

不到 30 秒,終端就會亮出綠色的

申請已完成! Resources: 4 added

。 整套標準大廠級隔離網絡環境,便完美在 Azure 的雲端物理世界裡破土落地。

第四階段:工業級基礎設施即代碼的避坑血淚史

利用這兩套代碼,你基本可以傲視所有還在網頁上苦苦點鼠標的傳統傳統網管。 但要在真正嚴苛的商業高並發、devOps 流水線里活下來,作為首席架構師,你必須立刻給團隊焊死以下兩條底線避坑規範:

1. 致命的「Terraform 狀態文件丟失」慘劇(State Lock)

如果你用的是 Terraform,當你執行完

Terraform apply

後,本地目錄里會悄悄生出一個名為

terraform.tfstate

的文本文件。

災難隱患:這個文件是 Terraform 記住當前雲端網絡長什麼樣的「唯一記憶大腦」。 如果別的開發在他們自己的電腦上也去跑這段代碼,由於他們本地沒有你這個 tfstate 文件,terraform 就會變成盲人,誤以為雲端什麼都沒有,從而在執行 apply 的瞬間,把你在雲端建好的生產網絡、連帶裡面的虛擬機,全部無情地連根拔起並物理擦除!

大廠標準免死金牌配置:嚴禁把 tfstate 留存在本地電腦上! 必須在 terraform { ... } 塊里配置 backend "azurerm" 策略。 強行把這個狀態記憶文件,鎖死鎖在 Azure 官方的一個加密 Storage Acc

Ount(存儲賬戶 Blob) 里,並且開啟狀態鎖(State Locking)。 這樣,全球任何人在任何角落跑代碼,都會去同一個中心大腦裡對齊數據,徹底焊死「覆蓋與誤刪」的慘劇。

2. 警惕 Bicep 里「硬編碼(Hardcode)」導致的跨地域癱瘓

在寫 Bicep 代碼時,很多新手為了圖省事,會直接在代碼里寫死

Location: 'eastasia'

(香港)。

原因拆解:如果有一天,公司業務突然要出海美國,你需要把整套一模一樣的隔離網絡在 eastus(美東機房)也克隆一套。 你一執行這行代碼,系統會無情地報錯,因為你的資源組明明建在美國,代碼卻強行命令微軟把網絡網絡拉在香港。

硬核規避指南:永遠利用參數動態抓取地緣。 正如我們上面 Bicep 示範模板的寫法:param location string = resourceGroup().location。 讓代碼自己去聰明地打聽「自己當前被種在哪個資源組裡」,資源組在哪,它就自動順藤摸瓜在哪落地,實現真正意義上的一套模板、全球無縫克隆。

總結

利用 Bicep / Terraform 實行現代化基礎設施即代碼(IaC)部署,核心的工業級精髓其實簡化為十六個字:

拓撲落碼,版本控制,中心存態,動態地緣。

你徹底告別了過去天天核對參數、提心吊膽怕網段配錯、深夜人肉在控制台點上百次鼠標的原始原始運維狀態。 把所有最核心的數字資產地基,完全固化成一段可以提交到 GitHub 的文本代碼。 坐在電腦前,優雅地改一個數字,一個回車,剩下的高防和擴容重任,放心地交給光速閃爍的雲原生時代。

2
← 返回新闻中心