Terraform 作為 IaC 工具,能有效簡化 Azure 基礎設施的組態和管理流程。在實際操作中,我們會先透過 Azure CLI 進行身份驗證,確保 Terraform 能夠存取 Azure 資源。接著,確認目標 Kubernetes 版本,並利用 Terraform 的 HCL 語言撰寫基礎設施組態程式碼。這些程式碼涵蓋了資源群組的建立、虛擬機器的設定、網路組態等,並可透過版本控制系統進行管理,實作可重複性與一致性。此外,Terraform 的狀態管理機制能有效追蹤基礎設施的變更,方便團隊協作與維護。
使用Terraform進行Azure基礎設施自動化組態
在開始使用Terraform進行Azure基礎設施自動化組態之前,我們需要先使用Azure CLI進行身份驗證。這一步驟確保Terraform可以代表我們在Azure中建立基礎設施。
7.5 使用Azure CLI進行身份驗證
首先,開啟終端機並執行以下命令進行Azure身份驗證:
az login
如果您尚未登入,請按照提示完成登入過程。
7.6 確定Kubernetes版本
接下來,我們需要確定要使用的Kubernetes版本。使用Azure CLI可以列出特定區域中可用的Kubernetes版本:
az aks get-versions --location eastus
這個命令會輸出JSON格式的可用版本列表。為了更好地閱讀,我們可以使用表格輸出格式:
az aks get-versions --location eastus --output table
從輸出的列表中選擇最新的Kubernetes版本。請注意,版本號碼可能會隨時間而變化,因此請務必選擇當前可用的版本。
7.7 建立基礎設施使用Terraform
現在,我們將使用Terraform建立基礎設施。Terraform是一種根據程式碼的基礎設施組態工具,允許我們使用HashiCorp Configuration Language (HCL) 定義基礎設施組態。
7.7.1 為什麼選擇Terraform?
Terraform是一種工具和語言,用於組態根據雲端的應用程式的基礎設施。它使得可靠地和重複地建立和組態雲端基礎設施變得容易。Terraform的功能透過外掛提供者進行擴充套件,因此它支援多個雲端供應商,包括Azure、Amazon Web Services (AWS) 和Google Cloud。
7.7.2 安裝Terraform
安裝Terraform只需下載對應作業系統的二進位可執行檔案並將其移動到系統路徑中即可。
雲端基礎設施自動化:Terraform 的應用
在現代軟體開發中,基礎設施的自動化組態是提高效率和降低成本的關鍵一步。Terraform 作為一種基礎設施即程式碼(Infrastructure as Code, IaC)的工具,允許我們使用人類可讀的組態檔案來建立和管理跨越不同雲端供應商的虛擬基礎設施。
Terraform 的優勢
Terraform 的一個主要優勢是其跨平臺的能力。無論您是使用 Microsoft Azure、Amazon Web Services (AWS) 或 Google Cloud Platform (GCP),Terraform 都能夠提供一致的組態和管理體驗。這意味著您可以使用相同的 Terraform 組態檔案來管理不同雲端供應商的基礎設施,從而減少學習曲線和提高團隊的生產力。
Azure、AWS 和 GCP 的 Terraform Provider
每個雲端供應商都有其對應的 Terraform Provider。例如,Azure 有其自己的 Terraform Provider,可以用來管理 Azure 的虛擬機器、儲存體和網路等資源。同樣,AWS 和 GCP 也有各自的 Provider,可以用來管理其對應的基礎設施元件。
範例:使用 Terraform 建立 Azure 虛擬機器
provider "azurerm" {
version = "2.34.0"
subscription_id = "your_subscription_id"
client_id = "your_client_id"
client_secret = "your_client_secret"
tenant_id = "your_tenant_id"
}
resource "azurerm_virtual_machine" "example" {
name = "example-vm"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
vm_size = "Standard_DS2_v2"
storage_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
}
os_profile {
computer_name = "example-vm"
admin_username = "testadmin"
admin_password = "Password1234!"
}
os_profile_linux_config {
disable_password_authentication = false
}
}
圖表翻譯:
flowchart TD A[開始] --> B[初始化 Terraform] B --> C[設定 Azure Provider] C --> D[建立資源群組] D --> E[建立虛擬機器] E --> F[設定虛擬機器屬性] F --> G[完成組態]
內容解密:
在上述範例中,我們首先指定了 Azure Provider 的版本和認證訊息。然後,我們定義了一個 azurerm_virtual_machine
資源,用來建立一臺 Azure 虛擬機器。這個資源需要指定虛擬機器的名稱、資源群組、位置和大小等屬性。此外,我們還需要指定虛擬機器的映像參照和作業系統組態。
使用Terraform建立基礎設施
Terraform是一種基礎設施即程式碼(IaC)工具,允許您使用人類可讀的組態檔案定義和建立基礎設施。它支援多個雲端供應商,包括Azure、AWS和Google Cloud Platform。
Terraform的優點
- 基礎設施即程式碼:Terraform允許您使用程式碼定義基礎設施,這使得基礎設施的管理和版本控制更加容易。
- 跨雲端供應商:Terraform支援多個雲端供應商,這使得您可以使用同一套工具建立和管理基礎設施,無論是在哪個雲端供應商上。
- 自動化:Terraform可以自動化基礎設施的建立和管理,減少手動錯誤和提高效率。
安裝Terraform
要開始使用Terraform,您需要先安裝它。您可以從Terraform官網下載Terraform。安裝完成後,您可以使用以下命令測試Terraform是否安裝成功:
terraform --version
Terraform專案設定
在開始使用Terraform之前,讓我們先瞭解一下Terraform專案的結構。一個Terraform專案通常由多個Terraform程式碼檔案(.tf檔案)組成。這些檔案包含了建立基礎設施所需的程式碼。
以下是Terraform專案的結構範例:
example-3/
├── container-registry.tf
├── kubernetes-cluster.tf
├── providers.tf
├── resource-group.tf
├── variables.tf
在這個範例中,每個Terraform程式碼檔案都有其特定的用途。例如,container-registry.tf
檔案負責建立容器登入,而kubernetes-cluster.tf
檔案負責建立Kubernetes叢集。
建立基礎設施
要建立基礎設施,您需要執行Terraform程式碼。您可以使用以下命令建立基礎設施:
terraform apply
這個命令會建立基礎設施,並將其組態為Terraform程式碼檔案中所定義的設定。
內容解密:
terraform --version
命令用於測試Terraform是否安裝成功。terraform apply
命令用於建立基礎設施。- Terraform程式碼檔案(.tf檔案)包含了建立基礎設施所需的程式碼。
- 每個Terraform程式碼檔案都有其特定的用途,例如建立容器登入或Kubernetes叢集。
圖表翻譯:
以下是Terraform專案結構的Mermaid圖表:
graph LR A[Terraform專案] --> B[container-registry.tf] A --> C[kubernetes-cluster.tf] A --> D[providers.tf] A --> E[resource-group.tf] A --> F[variables.tf]
這個圖表顯示了Terraform專案的結構,每個Terraform程式碼檔案都有其特定的用途。
圖表解說:
- Terraform專案是由多個Terraform程式碼檔案組成的。
- 每個Terraform程式碼檔案都有其特定的用途,例如建立容器登入或Kubernetes叢集。
terraform apply
命令用於建立基礎設施,並將其組態為Terraform程式碼檔案中所定義的設定。
使用 Terraform 建立 Azure 資源群組
在探討了 example-3 的專案結構後,現在讓我們簡化複雜度,回到較簡單的 example-1。建立 Azure 資源群組是使用 Terraform 的第一步,這個資源群組將包含所有在本章中建立的 Azure 資源。回顧第 3 章,我們手動透過 Azure 入口網站的 GUI 建立了一個資源群組。現在,我們將使用 Terraform 程式碼建立資源群組。
example-1 包含兩個 Terraform 程式碼檔案:providers.tf
和 resource-group.tf
。resource-group.tf
檔案是實際建立資源群組的程式碼,而 providers.tf
檔案包含 Terraform 提供者外掛的組態,我們稍後會詳細討論。
我們使用 terraform apply
命令執行 Terraform 程式碼。圖 7.5 顯示了程式碼檔案如何輸入到 Terraform 中,Terraform 執行程式碼並在 Azure 中建立 flixtube
資源群組。
逐步演化的架構與 Terraform
Terraform 是一個用於建立基礎設施的工具,允許我們逐步演化架構(見圖 7.6)。本章中的每個例子都可以獨立執行,因此您可以輕鬆地在每個階段建立基礎設施。
然而,通常的情況是透過迭代原型設計來開發基礎設施。您可以在 Terraform 中編寫一小段程式碼,應用它,然後測試是否建立了正確的基礎設施。
使用 Terraform 構建 Azure 資源群組
Azure
providers.tf
: 用於組態提供者外掛。resource-group.tf
: 用於組態 Azure 資源群組。
使用 terraform apply
命令執行 Terraform 程式碼,Terraform 會自動執行當前工作目錄中的所有 .tf
程式碼檔案,並在 Azure 中建立資源群組。
圖表翻譯:
flowchart TD A[開始] --> B[組態 Terraform] B --> C[建立資源群組] C --> D[應用 Terraform 程式碼] D --> E[驗證資源群組]
這個流程圖顯示了使用 Terraform 建立 Azure 資源群組的步驟。首先,組態 Terraform 提供者外掛,然後建立資源群組,接著應用 Terraform 程式碼,最後驗證資源群組是否已經建立。
使用 Terraform 建立 Azure 資源群組
在本文中,我們將使用 Terraform 建立一個 Azure 資源群組。這是基礎設施即程式碼(Infrastructure as Code, IaC)的一個基本範例。
建立資源群組
首先,我們需要建立一個 Terraform 組態檔案,例如 resource-group.tf
。在這個檔案中,我們將定義一個 Azure 資源群組的資源。
resource "azurerm_resource_group" "flixtube" {
name = "flixtube"
location = "eastus"
}
在這個範例中,我們使用 azurerm_resource_group
這個 Terraform 資源型別來建立一個 Azure 資源群組。這個資源群組的名稱是 flixtube
,位置是 eastus
。
執行 Terraform
要建立資源群組,我們需要執行 Terraform。首先,初始化 Terraform 工作目錄:
terraform init
然後,套用 Terraform 組態:
terraform apply
Terraform 會根據我們的組態檔案建立資源群組。
測試和迭代
建立資源群組後,我們可以測試和迭代我們的基礎設施。這個過程與正常的程式設計類別似,不同的是,我們是在雲端建立基礎設施。
圖表翻譯:
graph LR A[Terraform 組態檔案] -->|初始化|> B[Terraform 工作目錄] B -->|套用組態|> C[Azure 資源群組] C -->|測試和迭代|> D[基礎設施]
在這個圖表中,我們展示了使用 Terraform 建立 Azure 資源群組的過程。首先,我們建立 Terraform 組態檔案,然後初始化 Terraform 工作目錄。接下來,我們套用 Terraform 組態來建立 Azure 資源群組。最後,我們測試和迭代我們的基礎設施。
逐步建立基礎設施
在使用 Terraform 進行基礎設施管理時,我們可以逐步更新和擴充套件基礎設施。首先,Terraform 的初始執行會產生我們的初始基礎設施。如圖 7.6 所示,基礎設施的演化是一個遞進的過程。
宣告 Azure 資源群組
首先,我們需要宣告一個 Azure 資源群組,這將是我們所有資源的容器。這是基礎設施的基本開始,因此它對於我們的新基礎設施來說至關重要。
# 宣告 Azure 資源群組
resource "azurerm_resource_group" "example" {
name = "example-resource-group"
location = "East US"
}
name
屬性設定資源群組的名稱。location
屬性設定資源群組將被建立的位置(資料中心)。
修正提供者版本號
在初始化 Terraform 專案之前,讓我們來看看另一個檔案 providers.tf
。清單 7.2 顯示了 providers.tf
的程式碼(chapter-7/example-1/providers.tf)。這個檔案是用於定義和組態所有 Terraform 提供者外掛的地方。在這裡,我們只需要 Azure 提供者,並沒有傳遞任何引數給提供者,因此這個檔案相當簡潔。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.71.0"
}
}
required_version = ">= 1.5.6"
}
required_providers
區塊定義了所需的提供者和其版本。source
屬性指定了提供者的來源。version
屬性指定了提供者的版本。required_version
屬性指定了 Terraform 的最低版本要求。
圖表翻譯:
flowchart TD A[開始] --> B[宣告 Azure 資源群組] B --> C[設定資源群組名稱] C --> D[設定資源群組位置] D --> E[初始化 Terraform 專案] E --> F[組態提供者] F --> G[執行 Terraform]
這個流程圖描述了從宣告 Azure 資源群組到執行 Terraform 的整個過程。每一步驟都對應到特定的 Terraform 組態或操作。
Terraform 初始化與 Azure 提供者設定
Terraform 是一種根據雲端的基礎設施即程式碼工具,允許使用者定義和管理基礎設施的設定。為了使用 Terraform,您需要初始化它,並設定所需的提供者(Provider)。在本文中,我們將探討如何初始化 Terraform,並設定 Azure 提供者。
初始化 Terraform
初始化 Terraform 的第一步是建立一個新的 Terraform 工作目錄,並在其中建立一個 main.tf
檔案。然後,您需要設定 Azure 提供者。以下是設定 Azure 提供者的示例程式碼:
provider "azurerm" {
features {}
}
注意,如果您省略版本號,Terraform 將下載最新版本的提供者。
執行 Terraform 初始化
要初始化 Terraform,您需要執行以下命令:
terraform init
這個命令將下載所需的提供者外掛,並初始化 Terraform 的工作目錄。
Terraform 初始化的副產品
初始化 Terraform 後,您可以檢視工作目錄中建立的檔案和目錄。其中,.terraform
目錄包含了下載的提供者外掛,這些外掛將被快取以供日後使用。
Azure 提供者設定
Azure 提供者設定包括設定版本號和其他組態選項。以下是設定 Azure 提供者的示例程式碼:
provider "azurerm" {
version = "3.71.0"
features {}
}
注意,您可以省略版本號,讓 Terraform 下載最新版本的提供者。
內容解密:
在上述程式碼中,provider "azurerm"
用於設定 Azure 提供者,version
屬性用於指定提供者的版本號,features
屬性用於設定提供者的功能。透過這些設定,您可以管理您的 Azure 基礎設施設定。
圖表翻譯:
以下是 Terraform 初始化過程的流程圖:
flowchart TD A[初始化 Terraform] --> B[下載提供者外掛] B --> C[初始化工作目錄] C --> D[設定 Azure 提供者] D --> E[執行 Terraform 程式碼]
這個流程圖顯示了 Terraform 初始化過程中的各個步驟,從初始化 Terraform 到執行 Terraform 程式碼。
建立基礎設施
在初始化Terraform專案後,我們可以使用terraform apply
命令來建立基礎設施。這個命令會執行Terraform程式碼,並建立我們的基礎設施。
執行Terraform Apply
在相同的目錄中,輸入以下命令:
terraform apply
這個命令會收集所有Terraform程式碼檔案,並執行它們。您應該會看到類別似以下的輸出:
Terraform used the selected providers to generate the following
execution plan. Resource actions are indicated with the
following symbols:
+ create
Terraform will perform the following actions:
# azurerm_resource_group.flixtube will be created
+ resource "azurerm_resource_group" "flixtube" {
+ id = (known after apply)
+ location = "eastus"
+ name = "flixtube"
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
這個輸出描述了對我們的基礎設施進行的計劃更新。Terraform告訴我們即將進行的變更。
內容解密:
在這個過程中,Terraform會等待我們批准計劃後才會繼續更新基礎設施。這是檢查即將進行的變更是否正確和預期的好時機。一旦您對計劃感到滿意,您可以輸入yes
來批准它。
Mermaid 圖表
flowchart TD A[初始化Terraform專案] --> B[執行terraform apply] B --> C[檢查計劃] C --> D[批准計劃] D --> E[更新基礎設施]
圖表翻譯:
這個Mermaid圖表描述了建立基礎設施的過程。首先,我們初始化Terraform專案,然後執行terraform apply
命令。接下來,我們檢查計劃以確保即將進行的變更是正確和預期的。一旦我們對計劃感到滿意,我們可以批准它,然後Terraform會更新基礎設施。
Terraform 基礎知識
Terraform 是一種根據雲端的基礎設施即服務(IaaS)工具,允許使用者定義和管理基礎設施的設定。以下是 Terraform 的一些基礎知識:
Terraform 的工作原理
Terraform 透過讀取使用者定義的設定檔案(通常是 .tf
檔案),然後根據設定檔案中的內容建立或更新基礎設施的設定。Terraform 支援多種雲端平臺,包括 Azure、AWS、Google Cloud 等。
Terraform 的命令
Terraform 有幾個基本命令,包括:
terraform init
: 初始化 Terraform 工作目錄terraform plan
: 顯示 Terraform 將要執行的動作terraform apply
: 執行 Terraform 設定檔案中的動作terraform destroy
: 刪除 Terraform 建立的基礎設施
Terraform 的設定檔案
Terraform 的設定檔案通常是 .tf
檔案,內容包括:
provider
: 定義雲端平臺的提供者(例如 Azure、AWS 等)resource
: 定義基礎設施的資源(例如虛擬機器、儲存體等)output
: 定義輸出變數
Terraform 的狀態檔案
Terraform 會產生一個狀態檔案(terraform.tfstate
),用於記錄基礎設施的設定和狀態。狀態檔案包含了基礎設施的資源和屬性等訊息。
Terraform 的優點
Terraform 的優點包括:
- 基礎設施即服務(IaaS):Terraform 可以幫助使用者快速建立和管理基礎設施
- 版本控制:Terraform 可以幫助使用者管理基礎設施的版本和變更
- 跨平臺:Terraform 支援多種雲端平臺
Terraform 的應用場景
Terraform 的應用場景包括:
- 雲端基礎設施管理:Terraform 可以幫助使用者管理雲端基礎設施的設定和狀態
- DevOps:Terraform 可以幫助使用者實作 DevOps 的基礎設施即服務(IaaS)功能
- 雲端遷移:Terraform 可以幫助使用者遷移基礎設施到雲端平臺
內容解密:
在這個例子中,我們使用 Terraform 建立了一個 Azure 的資源群組。Terraform 會產生一個狀態檔案(terraform.tfstate
),用於記錄基礎設施的設定和狀態。狀態檔案包含了基礎設施的資源和屬性等訊息。透過 Terraform,我們可以快速建立和管理基礎設施,並實作版本控制和跨平臺的功能。
圖表翻譯:
以下是 Terraform 的工作流程圖:
graph LR A[Terraform 設定檔案] -->|讀取|> B[Terraform 工作目錄] B -->|初始化|> C[Terraform 狀態檔案] C -->|載入|> D[基礎設施設定] D -->|更新|> E[基礎設施] E -->|刪除|> F[Terraform 狀態檔案]
這個圖表顯示了 Terraform 的工作流程,從讀取設定檔案到刪除基礎設施。
瞭解Terraform狀態的重要性
Terraform是一種根據雲端的基礎設施管理工具,它使用狀態檔案來記錄和跟蹤基礎設施的變化。在本章中,我們將探討Terraform狀態的重要性和它如何影響基礎設施的管理。
從技術架構視角來看,利用Terraform管理Azure基礎設施,展現了IaC的優勢,讓基礎設施的版本控制、自動化佈署和跨雲平臺管理變得更有效率。本文逐步講解了從Azure CLI驗證、Kubernetes版本選擇到使用Terraform建立資源群組、虛擬機器等資源的完整流程,涵蓋了providers.tf
、resource-group.tf
等核心組態檔案的撰寫,以及terraform init
、apply
等關鍵指令的運用。然而,Terraform的學習曲線較陡峭,需要一定的HCL語法和雲端平臺知識,對於複雜的基礎設施,狀態管理和依賴關係處理也可能成為挑戰。展望未來,隨著雲原生技術的發展,Terraform與Kubernetes、Serverless等技術的整合將更加緊密,預計Terraform將在混合雲和多雲環境中扮演更重要的角色。對於希望提升基礎設施自動化管理水平的團隊,建議投入資源學習Terraform,並逐步將其整合到現有的DevOps流程中,以最大化其效益。