CDK vs. CloudFormation
主題 — AWS 基礎設施即程式碼(IaC)工具比較
工具 — AWS CloudFormation、AWS CDK
適合對象 — 想導入或評估 IaC 工具的開發者與 DevOps 工程師
CDK 不是要取代 CloudFormation,而是在它之上提供更好的開發體驗。
CloudFormation — 宣告式 IaC
CloudFormation (Cfn) 是 AWS 原生的 IaC 服務,使用 YAML 或 JSON 模板定義資源的目標狀態。
- 核心邏輯:告訴 AWS「我想要什麼」,AWS 負責執行
- 狀態管理:由 AWS 代管,不需手動維護狀態檔
- 缺點:沒有編程邏輯,架構一複雜模板就會變得極度冗長
AWS CDK — 編程式 IaC
AWS CDK (Cloud Development Kit) 是 CloudFormation 的預處理框架,讓你用真正的程式語言定義基礎設施。
運作流程:
寫程式碼 -> cdk synth(合成) -> 產生 CloudFormation YAML -> 部署- Constructs(組件):內建 AWS 最佳實踐,一行程式碼可展開為數百行 YAML
- 完整邏輯能力:支援迴圈、條件式、物件封裝與重複使用
- 支援語言:Python、TypeScript、Go、Java、C#
比較
| 項目 | CloudFormation | AWS CDK |
|---|---|---|
| 撰寫語言 | YAML / JSON | Python, TypeScript, Go... |
| 開發速度 | 慢,需查大量文件 | 快,IDE 自動補全 |
| 程式碼長度 | 非常冗長 | 簡潔 |
| 邏輯能力 | 僅限 Fn::If 等內建函式 | 完整程式邏輯 |
| 抽象化程度 | 低,每個屬性都要手寫 | 高,可自定義可重用組件 |
| 錯誤發現時機 | 部署時才報錯 | 編譯期或 IDE 即時提示 |
如何選擇
選 CDK:
- 團隊本身會寫程式,不想學 YAML 語法
- 架構複雜,有大量重複資源需要動態生成
- 希望用 IDE 快速查閱資源屬性與自動補全
選 CloudFormation:
- 只需建立少數簡單資源,不想建置 CDK 環境
- 第三方工具只支援原生 Cfn 模板
- 想深入理解 AWS 資源依賴關係與底層屬性
總結
對現代 DevOps 工程師而言,以 CDK 為主、Cfn 為輔 是最務實的策略。用 CDK 提升開發效率,遇到底層報錯或需要微調時,再靠對 CloudFormation 的理解來除錯。
