Terraform 和 Ansible 都是基礎設施即代碼(Infrastructure as Code, IaC)工具,但它們有不同的用途和特性。
Terraform
- 用途:主要用於管理基礎設施,如雲資源的佈署、修改和管理。Terraform 支援多種雲平台(如 AWS、Azure、GCP),以及其他服務提供商。
- 工作方式:使用宣告式語言(Declarative Language)。你定義想要的最終狀態,Terraform 負責達到這個狀態。例如,你指定要有 3 個虛擬機,Terraform 會確保最終狀態是 3 個虛擬機,無論最初是 0 個還是 2 個。
- 狀態管理:Terraform 有一個狀態文件來記錄基礎設施的現狀,確保每次應用變更時都能基於最新的狀態進行計算和更新。
- 計劃與執行:Terraform 提供 terraform plan 指令來預覽變更,並用 terraform apply 執行變更,這樣可以在實際改變基礎設施前先檢查變更內容。
Ansible
- 用途:主要用於配置管理、自動化任務和應用部署。Ansible 可以用來安裝軟體、配置伺服器、管理服務等。
- 工作方式:使用宣告式和指令式語言的混合(Ansible Playbooks 是 YAML 格式)。你可以定義具體的操作步驟,例如安裝某個軟體包、編輯配置文件、重啟服務等。
- 無狀態管理:Ansible 不保留狀態文件,每次執行 Playbook 都是從頭開始。這意味著 Ansible 每次運行時會重新檢查和執行所有任務。
- 推送模式:Ansible 使用 SSH 連接到目標伺服器並執行命令,這種方式稱為推送模式(Push Mode)。與此相對的,Terraform 是拉取模式(Pull Mode),它依賴於 API 與雲提供商互動。
總結
- 用途不同:Terraform 側重於基礎設施的管理和佈署,Ansible 側重於配置管理和應用部署。
- 語言和工作方式不同:Terraform 使用宣告式語言,定義最終狀態;Ansible 使用宣告式和指令式的混合,定義具體操作步驟。
- 狀態管理:Terraform 使用狀態文件追蹤資源狀態,而 Ansible 不保留狀態。
- 運行模式:Terraform 是拉取模式,Ansible 是推送模式。
這兩種工具可以互補使用,例如先用 Terraform 建立基礎設施,再用 Ansible 配置和管理這些資源。