Terraform 系列-什麼是 IaC?

東風微鳴發表於2023-04-11

系列文章

? Terraform 系列文章

前言

聊到 Terraform, 必然繞不開 IaC 這個概念?那麼,什麼是 IaC? ?

基本概念

基礎架構即程式碼 (Infrastructure as Code, IaC) 是指透過程式碼而不是手動流程/控制檯點選來管理和配置基礎架構。

這裡有 2 個關鍵詞:

  • Infrastructure
  • Code

Infrastructure 是被管理物件,在這裡,主要是指公有云(還有私有云、混合雲等).
Code 是管理方式,即像管理程式碼一樣管理公有云資源。那麼管理程式碼最重要的部分: 版本管理是繞不開的。

使用 IaC,建立的配置檔案包含了基礎設施的 spec,這使得編輯和分發配置變得更加容易。IaC 還確保每次都提供相同的環境、相同的資源、相同的配置。透過編輯和記錄配置的 spec,IaC 有助於避免未記錄的、臨時的配置更改(當然,前提是所有人都使用 IaC,而不是還會有人在控制檯點選修改導致配置漂移)。

版本控制是 IaC 的重要組成部分,配置檔案應該像任何其他軟體原始碼檔案一樣受到原始碼控制。
另外,隨著公有云的發展,公有云的標準化的 API 也使得將基礎架構元件模組化 (Terraform 裡叫做 modules) 成為可能,使用者可以像搭積木一樣組合這些基礎的元件。比如:在 AWS 上建個靜態部落格,就可以組合以下元件:

  • Route53
  • CloudFront
  • S3

IaC 的兩種實現方式

有兩種實現 IaC 的方法:宣告式命令式

宣告式方法定義了系統的理想狀態,包括需要的資源以及它們應該具有的任何屬性,IaC 工具將自動配置它。

Terraform 就是基於 IaC 宣告式的理念。在 Terraform 流行之前,另一個將宣告式發揚光大的當然是:Kubernetes!

宣告式方法還保留系統物件當前狀態的列表,這使得拆除基礎架構更易於管理。

相反,命令式方法定義了實現所需配置所需的特定命令,然後需要以正確的順序執行這些命令。

典型的就是 Ansible.

IaC 工具通常能夠在兩種方法中執行,但往往更喜歡一種方法而不是另一種方法。

如 Terraform, 它更喜歡宣告式的方法,但是它的 Provider、Modules、函式中仍然殘留不少命令式的方法, 如:local-exec

IaC 的好處

IaC(特別是宣告式的)是隨著公有云而發展起來的。

置備基礎設施歷來是一個耗時且成本高昂的手動過程。現在基礎設施管理已經從資料中心的物理硬體、虛擬化轉移到容器和雲端計算。

藉助雲端計算,基礎設施元件的數量不斷增加,每天都有更多的應用程式釋出到生產環境中,並且基礎設施需要能夠頻繁地啟動、擴充套件和關閉。如果沒有適當的 IaC 實踐,管理當今基礎設施的規模會變得越來越困難。

IaC 可以幫助您的組織管理 IT 基礎設施需求,同時提高一致性並減少錯誤和手動配置。

這, 就是 IaC 的必要性。

好處

  • 降低成本
  • 提高部署速度
  • 減少(手動配置)錯誤
  • 提高基礎設施一致性
  • 消除配置漂移

Terraform 是 IaC 領域事實上的領導者

毋庸置疑的,Terraform 是 IaC 領域事實上的領導者。

所有主流公有云,私有云,虛擬化,K8s, 容器都有在維護對應的 Terraform Provider 和 Modules.

Terraform Providers

IaC 工具

IaC 工具有哪些?目前主流的有:

宣告式:

命令式:

為什麼近期流行的都是宣告式的 IaC?

我覺得主要有以下原因:

  1. Kubernetes 的標杆作用
  2. 公有云雲資源以及 API 的標準化、規模化
  3. 具體到雲主機,cloud-init、packer(製作雲映象越來越方便)、不可變基礎設施也是原因之一。

為什麼 IaC 對 DevOps 很重要?

IaC 是實施 DevOps 實踐和 CI/CD 的重要組成部分。DevOps 和 CI/CD 主要是應用和元件層面的, 而 IaC 消除了開發人員的大部分配置工作,開發人員可以執行指令碼讓他們的基礎設施準備就緒。

這樣一來,應用程式部署就不會因等待基礎架構而停止,系統管理員也不需要管理耗時的手動流程。那麼整個開發部署迭代的流程就會越來越快, 越來越快。..

IaC 幫助您協調開發和運維,因為兩個團隊可以在程式碼倉庫中看到基礎架構全貌。

而且每個環境都可以使用相同的部署過程。環境一致性也有保障,開發上測試透過的,生產上出問題的機率也小。

DevOps 最佳實踐也適用於 IaC 中的基礎架構。基礎設施可以透過與應用程式在軟體開發期間相同的 CI/CD 管道,對基礎設施程式碼應用相同的測試和版本控制。將 IaC 的 modules 程式碼也引入 DevOps 理念,快速測試,快速迭代。

總結

IaC 是什麼?基礎架構即程式碼 (Infrastructure as Code, IaC) 是指透過程式碼而不是手動流程/控制檯點選來管理和配置基礎架構。

IaC 有宣告式和命令式兩種實現方式,現在更主流的是宣告式的。

為什麼需要 IaC? 隨著雲端計算帶來的大量基礎設施,IaC 已成必備工具。

IaC 也可以和 DevOps 流程/理念相契合。

參考資料

相關文章