Skip to content

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#

比較

項目CloudFormationAWS CDK
撰寫語言YAML / JSONPython, TypeScript, Go...
開發速度慢,需查大量文件快,IDE 自動補全
程式碼長度非常冗長簡潔
邏輯能力僅限 Fn::If 等內建函式完整程式邏輯
抽象化程度低,每個屬性都要手寫高,可自定義可重用組件
錯誤發現時機部署時才報錯編譯期或 IDE 即時提示

如何選擇

選 CDK:

  • 團隊本身會寫程式,不想學 YAML 語法
  • 架構複雜,有大量重複資源需要動態生成
  • 希望用 IDE 快速查閱資源屬性與自動補全

選 CloudFormation:

  • 只需建立少數簡單資源,不想建置 CDK 環境
  • 第三方工具只支援原生 Cfn 模板
  • 想深入理解 AWS 資源依賴關係與底層屬性

總結

對現代 DevOps 工程師而言,以 CDK 為主、Cfn 為輔 是最務實的策略。用 CDK 提升開發效率,遇到底層報錯或需要微調時,再靠對 CloudFormation 的理解來除錯。