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