概述
Terraform 實現了基礎架構即程式碼 (IaC) 的方法來管理基礎架構,減少手動配置的錯誤,並確保基礎架構部署的一致性和可重複性。它支援各種雲端供應商(如 AWS、Azure、GCP 等)和內部部署解決方案,並提供強大的功能來預先規劃和審查基礎架構變更。
主要特點
- 基礎架構即程式碼 (IaC):使用 HCL (HashiCorp Configuration Language) 以程式碼定義基礎架構。
- 多雲支援:支援 AWS、Azure、GCP 等各種雲端和服務供應商。
- 狀態管理:追蹤基礎架構的實際狀態,以有效管理變更。
- 執行計畫預覽:在套用變更之前,可以預覽將建立、修改或刪除哪些資源。
主要指令 (子指令)
Terraform 透過各種子指令來執行基礎架構管理工作流程。
核心工作流程
工具程式
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`terraform` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
展示 Terraform 常見工作流程的範例。
初始化 Terraform 專案
terraform init
在開始新的 Terraform 專案或克隆現有專案後執行,以下載所需的提供者。
預覽基礎架構變更計畫
terraform plan
預覽設定檔中定義的變更將如何套用到實際基礎架構。此步驟不會實際變更資源。
部署或更新基礎架構
terraform apply --auto-approve
根據 plan 指令確認的變更,將其套用到實際的雲端或內部部署基礎架構。`--auto-approve` 選項會跳過確認提示。
移除基礎架構資源
terraform destroy --auto-approve
銷毀 Terraform 管理的所有資源。此指令應謹慎使用。
格式化設定檔
terraform fmt
自動將目前目錄中的所有 Terraform 設定檔 (.tf) 格式化為標準格式。
安裝
Terraform 通常不包含在大多數 Linux 發行版中,因此您需要從 HashiCorp 官方網站下載二進位檔進行安裝。以下是 Debian/Ubuntu 系統的建議安裝方法。
透過 APT 儲存庫安裝 (Debian/Ubuntu)
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
新增 HashiCorp 的官方 APT 儲存庫並安裝 Terraform 的方法。此方法便於保持最新版本。
驗證安裝
安裝後,執行以下指令以確認 Terraform 是否已正確安裝。
檢查版本
terraform -v
提示與注意事項
有效使用 Terraform 並避免潛在問題的提示和注意事項。
主要提示
- 狀態檔案管理:`terraform.tfstate` 檔案記錄了基礎架構的目前狀態,建議安全地管理它,並避免直接將其包含在版本控制系統中。通常建議使用遠端後端,如 S3、Azure Blob Storage、GCS 等。
- 使用模組:將可重複使用的基礎架構元件建立為模組進行管理,可以提高程式碼的可讀性和可維護性。
- 審查計畫:始終使用 `terraform plan` 指令預覽變更,以防止意外的資源變更或刪除。這在生產環境中尤其重要。
- 版本控制:Terraform 設定檔 (.tf) 必須使用 Git 等版本控制系統進行管理,以追蹤變更歷史並促進協作。
- 敏感資訊管理:不要直接在設定檔中硬編碼 API 金鑰、密碼等敏感資訊,而應使用環境變數、Terraform 變數 (tfvars) 或 Vault 等秘密管理工具。
注意事項
- 銷毀指令 (`terraform destroy`) 是不可逆的,因此在執行前務必仔細檢查,並在需要時執行備份。
- 狀態檔案損壞:如果狀態檔案損壞,Terraform 將無法準確了解基礎架構的實際狀態,從而導致問題。使用遠端後端和鎖定功能可以降低此風險。
- 版本不符:Terraform CLI 版本與提供者版本之間的差異可能導致意外行為。建議使用 `.terraform.lock.hcl` 檔案來固定提供者版本。