Site icon Mr. 沙先生

CDK 與他們的產地:CDK for Terraform 用程式語言定義基礎架構

繼前篇「CDK 與他們的產地:CDK vs. CDKTF vs. CDK8S 家族介紹」介紹了整個 CDK 家族的生態系後,這篇我想要來比較深入的來聊聊 CDK for Terraform 這個 infrastructure as code tool,其實已經研究 CDK for Terraform 好一陣子,但遲遲拖稿沒把它寫完的原因其中一塊就是希望等 CDK for Terraform 的未來更加明確一點再來紀錄,而在發佈這篇文章的時候幾乎已經可以奠定 CDK for Terraform 的地位。

Background

在 CDK 發佈後,社群陸續有許多人響應這樣的設計模式而 skorfmann 就是其中一位響應且實踐出基於 CDK Constructs / jsiiTerrastack,然而這個專案就馬上受到 AWS CDK Team 和 HashiCorp 的關注並且共同開發並且專案納入 HashiCorp 開源專案改名為 CDK for Terraform 同時也稱為 Terraform CDK (CDKTF)。

Terrastack = CDK for Terraform = Terraform CDK = CDKTF

CDK for Terraform 名為 CDK 又 Terraform 的,不曉得的人一定很混亂明明兩個不同公司但同性質的 IaC 工具,而且在某種程度上存在一定的競爭關係怎麼會併在一起講?

HashiCorp 併入 Terraform CDK 的好處 ?

Terraform 除了是 IaC 工具中的佼佼者,而其社群的生態系更是不容捍衛的地位,但是 Terraform 一直存在著「要簡單又要能複雜」的問題。

由 HashiCorp 建立的 HCL (HashiCorp Configuration Language) 語言的原意是希望讓 SRE 可以透過簡單的語法管理 Infrastructure 不要因為程式語言的門檻而不好入門,但隨著 Terraform 的發展越來越蓬勃,使用的情境越來越複雜後原本的 HCL 已經沒辦法滿足社群的需求,所以在 v0.12 版本後 HCL 語法大改加入了程式語言的特性,這讓社群有了兩個派系,一是堅持初衷的「陳述式的語法」一是 v0.12 的「程式語言特性」,這讓 Terraform 發展成一個有點尷尬的局面。

而 CDKTF 的出現著實讓原本 Terraform 獲得了解套的方法,CDKTF 產生 JSON 格式讓 Terraform 看得懂的作法使得原本的 Terraform 不但不需要再去思考「programing or description」要更複雜的情境就讓 CDKTF 去處理,而且 CDKTF 基於 jsii 實現了多個程式語言的支援,對 HashiCorp 簡直就是一個超舒服的解決方案。

Getting Started

CDKTF 的使用和 Terraform 指令很像,可以參考下圖對應兩者的功能

安裝與初始化

cdktf-cli 基於 npm 安裝,cdktf init 會自動建立整個專案目錄結構,--local 指令代表 state 放在本機,如果沒指定預設會需要 Terraform Cloud。

$ npm install -g cdktf-cli@latest
$ cdktf init --template="typescript" --local

HashiCorp 官方教學中有簡單的範例可以參考怎麼建立 AWS VPC,或者作者也會寫一些 Sample 參考

編寫完成後先 cdktf diff 檢查這次變更項目,確認後再用 cdktf deploy。對應 terraform planterraform apply 功能。

如果 cdktf diff 顯示的結果不好辨識也可以先用 cdktf synth 輸出 JSON 後再用 terraform plan 執行

$ cdktf synth && terraform plan

cdktfterraform 兩者可以互補或選擇喜歡的執行方法。

CDK for Terraform 的未來

CDKTF 跟絕大多數新興的開源專案一樣有著美好的初衷,但能不能永續發展才是重點,雖然目前 CDKTF 仍在 Alpha 階段,但 CDKTF 建構在 Terraform 之上有了得天獨厚的優勢,原生就擁有 Terraform Provider、Module 的支援,

在 Jan, 2021 時 CDKTF 有了重大的進展「Announcing CDK for Terraform 0.1」在這篇部落格不但是發佈 CDKTF 0.1 版本以及支援 Python, Typescript, Java 和 C#,更大的消息是原作者 skorfmann 加入 HashiCorp 從業餘變全職開發 CDKT 而且更公開招募一起開發 CDKTF 的軟體工程師,從這點就可以看出來 HashiCorp 對 CDKTF 的重視。

References

Exit mobile version