筆者在前文《terraform 簡介》中簡單介紹了 terraform 相關的概念,本文讓我們使用 terraform 在 azure 上建立乙個虛機,以此來直觀體驗一下 terraform 強大威力。說明:本文的演示環境為 ubuntu 16.04。
在 terraform 的配置檔案中,比較常見的配置型別有 provider 和 resource。
provider在 terraform 中負責管理資源的生命週期:建立、讀取、更新、刪除。比如訪問 aws 中的資源需要使用 aws 的 provider,訪問 azure 中的資源需要使用 azure 的 provider。
resource是基礎設施的乙個元件。它可能是一些低階元件,例如物理伺服器、虛擬機器或容器。也可以是更高階別的元件,如電子郵件提供程式、dns記錄或資料庫提供程式。
provider "訪問 azure 中的資源需要使用 azure 的 provider,即這裡的 "azurerm"。這裡沒有把訪問 azure 的認證資訊寫進來,還是以前文《terraform 簡介》中設定環境變數的方式來提供認證資訊。azurerm
"
下面的配置檔案在 eastasia 的資料中心建立名稱為 nickresourcegroup 的 resource group:
resource "在配置檔案的其他部分中,可以使用 $ 引用該 resource group。azurerm_resource_group""
nicktfrg
"
}
下面的配置在 resource group nickresourcegroup 中建立名為 nickvnet 的虛擬網路,其網路空間為 10.0.0.0/16:
resource "然後在 nickvnet 虛擬網路中建立名稱為 nicksubnet 的子網:azurerm_virtual_network""
nicktfnetwork""
tags
}
resource "azurerm_subnet""
nicktfsubnet""
virtual_network_name = "$"
address_prefix = "
10.0.2.0/24
"}
resource "網路安全組控制出入虛機的網路流量。 下面的配置建立名為 nicknetworksecuritygroup 的網路安全組並定義規則放行 tcp 埠 22 上的 ssh 資料報:azurerm_public_ip""
nicktfpublicip""
public_ip_address_allocation = "
dynamic
"tags
}
resource "虛擬網絡卡(nic)將虛機連線到指定的虛擬網路、公共 ip 位址和網路安全組。下面的 terraform 配置資訊建立名為 nicknic 的虛擬 nic,並連線到已建立的虛擬網路資源:azurerm_network_security_group""
nicktfnsg""
security_rule
tags
}
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 "準備好上面的資源後就可以開始建立虛機了,下面的配置建立名為 nickvm 的虛機,並新增虛擬網絡卡 nicknic。 新的虛機基於 ubuntu 16.04 lts 映像並禁止通過密碼登入,同時會建立乙個可以通過秘鑰登入的名稱為 nick 的使用者。注意,ssh_keys 部分提供了 ssh 金鑰資料,key_data 字段需要提供使用者的有效 ssh 公鑰:azurerm_storage_account""
nicktfstorageaccount""
resource_group_name = "$"
location = "
eastasia
"account_replication_type = "
lrs"
account_tier = "
standard
"tags
}
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從 portal 上登入 azure 檢視我們建立的 resouce group nickresourcegroup,其中的資源包括虛擬機器 nickvm 及其相關的網絡卡、public ip 位址、虛擬網路、網路安全組、儲存等元件:$ terraform plan
獲取虛機的公共 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 提供一種簡單機制,用於將配置檔案部署到阿里雲或其他任意支援的雲上,並對其進行版本控制。它編寫了描述雲資源拓撲的配置檔案中的基礎結構,例如虛擬機器 儲存帳戶...