terraform planterraform apply 是 Terraform 操作基礎設施的兩個核心指令。plan 比對三方(state 檔、雲端現況、HCL 描述)產出差異報告,告訴使用者「如果 apply 會發生什麼」,但不做任何改動。apply 執行 plan 算出的差異,在雲端建立、修改或刪除資源。

概念位置

plan/apply 的分離是 IaC 可審查性的基礎。模組七(PR 流程)的核心機制就是「PR 觸發 plan → plan 結果貼回 PR → reviewer 看 plan 再決定要不要 apply」。這個「先看再動」的流程跟手動操作(直接在 Console 改)的根本差別。

可觀察訊號

需要理解 plan/apply 的情境包括:第一次跑 Terraform、review 別人的 infra PR(看 plan 輸出)、排查 drift(plan 在沒有 code 變更的情況下顯示差異)、或決定一次 apply 是否安全。

設計責任

plan 輸出的三種動作標記:

標記意義風險
+新增資源低(新建不影響現有)
~修改資源(in-place update)中(看改什麼,改 tag 低風險、改 instance type 可能重啟)
-/+先刪後建(forces replacement)高(stateful 資源如 RDS 代表資料遺失)
-刪除資源高(不可逆)

review plan 時最需要警惕的是 -/+(forces replacement)——看起來只是改一個屬性,但某些屬性的修改會觸發資源重建(例如 RDS 的 identifier 改名)。

plan 與 apply 之間可能有時間差。如果 plan 之後、apply 之前有人手動改了雲端資源,apply 時的實際行為可能跟 plan 預期的不同。多數團隊在 apply 階段會重跑一次 plan 並要求結果一致。

鄰卡