Terraform 建立 Azure 虛機

2021-09-08 14:16:20 字數 4101 閱讀 8125

筆者在前文《terraform 簡介》中簡單介紹了 terraform 相關的概念,本文讓我們使用 terraform 在 azure 上建立乙個虛機,以此來直觀體驗一下 terraform 強大威力。說明:本文的演示環境為 ubuntu 16.04。

在 terraform 的配置檔案中,比較常見的配置型別有 provider 和 resource。

provider在 terraform 中負責管理資源的生命週期:建立、讀取、更新、刪除。比如訪問 aws 中的資源需要使用 aws 的 provider,訪問 azure 中的資源需要使用 azure 的 provider。

resource是基礎設施的乙個元件。它可能是一些低階元件,例如物理伺服器、虛擬機器或容器。也可以是更高階別的元件,如電子郵件提供程式、dns記錄或資料庫提供程式。

provider "

azurerm

"

訪問 azure 中的資源需要使用 azure 的 provider,即這裡的 "azurerm"。這裡沒有把訪問 azure 的認證資訊寫進來,還是以前文《terraform 簡介》中設定環境變數的方式來提供認證資訊。

下面的配置檔案在 eastasia 的資料中心建立名稱為 nickresourcegroup 的 resource group:

resource "

azurerm_resource_group""

nicktfrg

"

}

在配置檔案的其他部分中,可以使用 $ 引用該 resource group。

下面的配置在 resource group nickresourcegroup 中建立名為 nickvnet 的虛擬網路,其網路空間為 10.0.0.0/16:

resource "

azurerm_virtual_network""

nicktfnetwork""

tags

}

然後在 nickvnet 虛擬網路中建立名稱為 nicksubnet 的子網:

resource "

azurerm_subnet""

nicktfsubnet""

virtual_network_name = "$"

address_prefix = "

10.0.2.0/24

"}

resource "

azurerm_public_ip""

nicktfpublicip""

public_ip_address_allocation = "

dynamic

"tags

}

網路安全組控制出入虛機的網路流量。 下面的配置建立名為 nicknetworksecuritygroup 的網路安全組並定義規則放行 tcp 埠 22 上的 ssh 資料報:

resource "

azurerm_network_security_group""

nicktfnsg""

security_rule

tags

}

虛擬網絡卡(nic)將虛機連線到指定的虛擬網路、公共 ip 位址和網路安全組。下面的 terraform 配置資訊建立名為 nicknic 的虛擬 nic,並連線到已建立的虛擬網路資源:

resource "

azurerm_network_inte***ce""

nicktfnic""

network_security_group_id = "$"

ip_configuration

"private_ip_address_allocation = "

dynamic

"public_ip_address_id = "$"

} tags

}

若要為新建的虛機儲存啟動診斷日誌,需要乙個儲存帳戶。這些啟動診斷日誌有助於排查故障和監視虛機狀態。這裡建立的儲存帳戶僅用於儲存啟動診斷資料。由於每個儲存帳戶必須具有唯一名稱,下面的配置會先生成一些隨機文字:

resource "

random_id""

randomid""

} byte_length = 8

}

接下來就可以建立儲存帳戶了。 下面的配置會建立乙個儲存帳戶,其名稱基於上一步中生成的隨機文字:

resource "

azurerm_storage_account""

nicktfstorageaccount""

resource_group_name = "$"

location = "

eastasia

"account_replication_type = "

lrs"

account_tier = "

standard

"tags

}

準備好上面的資源後就可以開始建立虛機了,下面的配置建立名為 nickvm 的虛機,並新增虛擬網絡卡 nicknic。 新的虛機基於 ubuntu 16.04 lts 映像並禁止通過密碼登入,同時會建立乙個可以通過秘鑰登入的名稱為 nick 的使用者。注意,ssh_keys 部分提供了 ssh 金鑰資料,key_data 字段需要提供使用者的有效 ssh 公鑰:

resource "

azurerm_virtual_machine""

nicktfvm""

network_inte***ce_ids = ["$"

] vm_size = "

standard_ds1_v2

"storage_os_disk

storage_image_reference

os_profile

os_profile_linux_config

}boot_diagnostics "}

tags

}

到這裡配置檔案就完成了,完整的配置檔案內容請參考這裡。

建立 terraform 配置檔案(也被稱為模板)後,第一步是初始化 terraform。這一步會安裝 配置檔案中用到的所有 terraform 外掛程式:

$ terraform init
然後執行 plan 驗證配置檔案的正確性(關於登入 azure 的認證資訊,請參考前文《terraform 簡介》):

$ . azureenv.sh

$ terraform plan

從 portal 上登入 azure 檢視我們建立的 resouce group nickresourcegroup,其中的資源包括虛擬機器 nickvm 及其相關的網絡卡、public ip 位址、虛擬網路、網路安全組、儲存等元件:

獲取虛機的公共 ip 位址

$ az vm show --resource-group nickresourcegroup --name nickvm -d --query [publicips] --o tsv
或者是直接在 portal 上檢視虛機的資訊:

通過 ssh 登入虛機

這就可以開始工作了(當然對於乙個系統管理員來說,所謂的工作就常常是指以自動化的方式在虛機上部署各種應用)!

如果你看過筆者的《azure 基礎:使用 powershell 建立虛擬機器》一文,你會發現本文的結構與其高度相似。其實不管是通過 powershell 還是 azure cli,或者是本文介紹的 terraform(當然,terraform 強大的功能讓它具有非常大的優勢),我們操作的資源物件都是一樣的。當你手中有多個工具時,你就可以根據具體的場景選擇最佳的方式完成任務。

參考:

在 azure 中使用 terraform 建立 linux 虛機

阿里雲Terraform實踐

terraform安裝 alibaba terraform provider 設定環境變數 執行參考資料 brew info go brew uninstall go編輯 bash profile export gopath users sjl projects golang export path...

Module 讓 Terraform 使用更簡單

眾所周知,terraform 是乙個開源的自動化的資源編排工具,支援多家雲服務提供商。阿里雲作為第三大雲服務提供商,terraform alicloud provider 已經支援了超過 90 多個 resource 和 data source,覆蓋20多個服務和產品,吸引了越來越多的開發者加入到阿...

Terraform一鍵部署ECS例項

hashicorp terraform 是乙個it基礎架構自動化編排工具,可以用 來管理維護 it 資源。terraform的命令列介面 cli 提供一種簡單機制,用於將配置檔案部署到阿里雲或其他任意支援的雲上,並對其進行版本控制。它編寫了描述雲資源拓撲的配置檔案中的基礎結構,例如虛擬機器 儲存帳戶...