使用 Terraform 創(chuàng)建 Azure 虛擬機
之前寫過一篇 使用 Terraform 部署 Proxmox 虛擬機,那是一臺 Core i7-8700 + 64G 的 Homelab 上搭建的虛擬機環(huán)境,這也是我一直以來的實驗環(huán)境。直至去年加入微軟 MVP 拿到了 Azure 的 credit,在需要資源較多或者拉取鏡像頻繁的情況下我也會選擇使用 Azure 的虛擬機,尤其是最近經(jīng)常在多集群的環(huán)境做測試。
在 Azure 上創(chuàng)建虛擬機,我也從一開始的 Web 頁面專項 CLI,再到現(xiàn)在因為需要復(fù)雜配置時的 Terraform。這篇文章就分享下如何使用 Terraform 配置 Azure 虛擬機的創(chuàng)建。
Terraform[1] 是一個基礎(chǔ)設(shè)施即代碼的軟件工具。使用 Terraform 可以通過編寫代碼來描述基礎(chǔ)設(shè)施(包括虛擬機、負(fù)載均衡器、數(shù)據(jù)庫等云和本地資源)的期望狀態(tài),安全靈活高效地構(gòu)建、更改和版本化云和本地資源。
前置條件
在開始之前,確保已經(jīng)具備如下條件:
- Azure 賬戶
- Terraform CLI[2]
- Azure CLI[3]
認(rèn)證
既然要做自動化,第一步就要解決認(rèn)證的問題,畢竟每次都進(jìn)行手工認(rèn)證是不現(xiàn)實的,不符合懶人的特征。
Terraform 的 Azure Provider[4] 支持 5 種認(rèn)證方式[5]。由于我只在本地使用,故本文是通過 Azure CLI 的方式[6] 進(jìn)行認(rèn)證。
執(zhí)行下面的命令開啟認(rèn)證,認(rèn)證之前需訪問 https://portal.azure.com/#settings/directory 獲取 tenant 信息。
執(zhí)行命令后會自動跳轉(zhuǎn)到瀏覽器,完成認(rèn)證流程。
認(rèn)證成功后,可通過命令查看賬戶信息。
如果有多個訂閱,需要設(shè)置當(dāng)前賬戶使用的訂閱。
代碼
腳本已經(jīng)提交在 GitHub 上,可以訪問 https://github.com/addozhang/terraform-azure-sample 獲取。
將代碼克隆到本地。
腳本包含了兩部分:
- resource-group:Azure 上的所有資源都是在某個資源組下創(chuàng)建的,在創(chuàng)建虛擬機之前需要先創(chuàng)資源組,或使用已有的資源組。在創(chuàng)建資源組的同時,也會創(chuàng)建虛擬網(wǎng)絡(luò)和子網(wǎng)。
- virtual-machine:顧名思義,創(chuàng)建虛擬機資源。
創(chuàng)建資源組
進(jìn)入到目錄 resource-group 中,先執(zhí)行下面的命令來初始化 Terraform 和下載 Azure provider。
在 variables.tf 文件中定義了入?yún)ⅲ嘿Y源組名和位置。執(zhí)行下面的命令可以創(chuàng)建資源組,也可在創(chuàng)建時通過參數(shù)來指定名字和位置。
執(zhí)行命令檢查 Terraform 代碼。
執(zhí)行下面的命令來應(yīng)用代碼。
通過 terraform state list? 查看創(chuàng)建的資源?;蛘咄ㄟ^ terrafor show 來查看資源的詳細(xì)信息。
創(chuàng)建虛擬機
進(jìn)入到目錄 virtual-machine 目錄,依然是先運行命令進(jìn)行初始化。
創(chuàng)建虛擬機的參數(shù)就會多一些,具體參數(shù)定義可以查看 variables.tf?,通過 terraform.tfvars 文件可以設(shè)置參數(shù)值,這里 需要指定使用的訂閱 ID。
執(zhí)行代碼和參數(shù)檢查。
執(zhí)行命令來創(chuàng)建虛擬機。
比如將虛擬機的數(shù)量 vm_count? 設(shè)置為 3,執(zhí)行完上面的命令之后查看資源。
通過命令 terraform show 可以查看資源的詳細(xì)信息,比如公網(wǎng)的 IP 地址等等。
參考資料
[1] Terraform: https://developer.hashicorp.com/terraform/intro
[2] Terraform CLI: https://developer.hashicorp.com/terraform/downloads
[3] Azure CLI: https://learn.microsoft.com/en-us/cli/azure/install-azure-cli
[4] Azure Provider: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
[5] 5 種認(rèn)證方式: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs#authenticating-to-azure
[6] Azure CLI 的方式: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/azure_cli