Terraform 與 CloudFormation:比較兩種基礎架構即代碼產品 (2022)
已發表: 2022-04-10基礎設施即代碼 [IaC] 在過去幾年中變得越來越流行,這也難怪為什麼。 IaC,也稱為軟件定義的基礎架構,是一種 IT 設置,開發人員或運營團隊可以使用它來通過軟件自動管理和提供應用程序的技術堆棧。
使用 IaC,無需使用手動流程來配置離散硬件設備和操作系統。 這也是DevOps的基礎之一,可以提高工作的效率和質量。 在 AWS 上實施 IaC 最常用的兩個工具是開源工具Terraform和CloudFormation 。
什麼是 Terraform?
- Terraform 允許您在可以輕鬆共享、修改和重用的可讀配置文件中定義本地和雲資源。

- 它提供了一個持久、一致的工作流程來供應和管理您的所有基礎設施。
- Terraform 可以管理低級組件,例如:
- 計算
- 網絡資源
- 貯存
Terraform 是如何工作的?
- Terraform 可以通過其在雲平台和各種服務上的應用程序編程接口 (API) 創建和管理資源。
- 提供者使其能夠通過可訪問的 API 與幾乎任何平台或服務一起工作。
- Terraform 社區與 1700 多家供應商合作,管理著數千種服務和資源,公司還在不斷擴展。
- 您可以在Terraform Registry上找到所有公開可用的提供程序:
- 亞馬遜網絡服務 (AWS)
- Azure、谷歌云平台(GCP)
- Kubernetes
- 頭盔
- GitHub
- 斯普朗克
- 數據狗
核心 Terraform 工作流程包含三個階段:
- 編寫:定義可以通過多個雲服務和提供商運行的資源。
- 計劃: Terraform 將編譯一個執行計劃,概述它將根據現有基礎設施和您的配置創建、更新或銷毀的基礎設施。
- 應用:一旦獲得批准,Terraform 將按照正確的順序執行所有建議的操作,並考慮任何資源依賴關係。
為什麼選擇 Terraform?
- 管理任何基礎設施
Terraform 對基礎設施採取了不可磨滅的方法,以降低修改或更新基礎設施和服務的複雜性。 它還在狀態文件中跟踪您的真實基礎設施。 該文件將確定需要對您的基礎架構進行的所有必要更改,使其與您的配置文件保持一致。 這些文件描述了您的基礎設施的最終狀態。 由於 Terraform 控制底層邏輯,因此您無需編寫詳細說明來創建資源。 它將構建一個資源圖來規範資源依賴關係。 它將創建或修改非依賴資源,幫助您輕鬆跟踪所有資源。
- 標準化配置
Terraform 非常高效,因為它支持模塊或可重用的配置組件。 模塊提供了一種輕鬆的方式來打包和重用代碼,並且等效於編程或腳本語言中的方法或功能。 模塊被認為是標準接口,因為它們通過分配輸入和返回輸出來創建資源。 通過提高可讀性並允許團隊利用邏輯塊來組織基礎設施,這大大簡化了項目。
模塊的另一個好處是它們可以輕鬆地獲取並共享到任何 Terraform 項目中。 模塊通常用作管理和創建多個資源的接口。 這顯著減少了項目中重複代碼的數量,但是在僅更改選擇參數的同時復制和粘貼代碼部分可能是單調的。 通過使用輸入變量,您可以自定義模塊的行為,並可能自定義它如何標記資源。 Terraform 模塊也可以返回輸出,這些輸出可以作為不同模塊或資源的輸入。
在運行任何規模的基礎架構時,無疑會有大量的組件和配置。 這可能會很棘手,因為組織內不同團隊使用的基礎架構中有很多細微的變化。 這會使事情變得更加複雜,因為基礎設施可能跨越從內部部署到眾多雲供應商的各種拓撲結構。 因此,組織和維護基礎設施是一個複雜的過程。
什麼是 AWS CloudFormation?
AWS CloudFormation 為企業和開發人員提供了一種創建各種相關 AWS 和其他資源的簡單方法。 開發人員可以直接、聲明式的方式安裝和更新數據庫、計算和各種其他資源,消除指定特定資源 API 的挑戰。 Cloudformation 還定期、可預測且安全地管理資源生命週期。 它還允許自動回滾、自動狀態管理以及所有帳戶和區域的資源管理。


CloudFormation 讓您可以將更多時間用於在 AWS 中運行的應用程序,而減少管理資源的時間。 您可以設計一個模板來定義您想要的所有 AWS 資源,包括 Amazon EC2 實例或 Amazon RDS 數據庫實例等。CloudFormation 將負責預置和配置您的資源。 它還處理創建和配置 AWS 資源,併計算出所有依賴物流。
為什麼選擇 CloudFormation?
- 簡化基礎設施管理
要構建包含後端數據庫的可擴展 Web 應用程序,您可以使用 Amazon 關係數據庫、服務數據庫實例或 Auto Scaling 組。 在使用您選擇的服務創建資源後,您必須將它們配置為協作。 這些額外的步驟可能會使您的應用程序啟動的過程變得複雜並減慢速度。 CloudFormation 允許您創建模板或修改現有模板。 模板定義了您的所有資源及其所有組件。
使用該模板創建 CloudFormation 堆棧將允許服務完全控制 Auto Scaling 組、負載均衡器和數據庫。 成功創建堆棧後,您的 AWS 資源將完全正常運行。 刪除堆棧很簡單,但請記住,刪除堆棧意味著刪除它所擁有的所有資源。 總而言之,CloudFormation 使管理單個單元中的資源集合成為一種輕鬆的體驗。
- 快速復制您的基礎架構
如果您的應用程序需要額外的可用性,您可能會在多個區域複製它,這樣如果一個區域不可用,人們仍然可以在其他地方使用您的應用程序。 這說起來容易做起來難。 複製您的應用程序可能具有挑戰性,因為它還需要您複製資源。 您必須記錄應用程序所需的每個資源,同時在每個區域中管理和配置這些資源。
CloudFormation 模板非常棒,因為您可以重複使用它們來一致且重複地創建資源。 為此,您必須定義一次資源,然後在多個區域連續供應這些資源。 CloudFormation 不斷適應,最近的更新和新選項使得有多種方法來創建資源成為可能。 其中包括利用 AWS CDK 以高級語言進行編碼、檢測配置偏差以及導入現有資源。 現在有一個註冊表,可以方便地創建具有 Cloudformation 的許多核心優勢的自定義類型。
CloudFormation 四個主要概念
- 模板是 JSON 或 YAML 格式的文本文件,用於描述成功運行應用程序所需的所有資源的預期狀態。 它們由以下部分組成:
- 模板參數的可選列表(在堆棧創建時提供的輸入值)
- 輸出值的可選列表(例如,Web 應用程序的完整 URL)
- 可選的數據表列表用於查找靜態配置值(例如,AMI 名稱)。
- AWS 資源列表及其配置值
2.模板文件格式版本號
3. 堆棧強制執行和管理模板中的所有資源,允許一起管理這些資源的狀態和依賴關係。
4. 變更集是堆棧操作為創建、更新或刪除資源而執行的所有更新的預覽。
5. 堆棧集是您同時管理的一組堆棧,可以復制一個組。