何謂基礎架構即程式碼?
簡單來說,Infrastructure as Code ( IaC ) 是使用程式碼來管理和配置基礎結構 (網路、虛擬機器、負載平衡器、群集、服務和連線拓樸),以描述性的模式取代手動流程。
透過IaC,設定檔定義您的基礎架構,這也使得編輯、共用和重複使用設定變得更加容易。 透過將基礎架構編碼,您可以在每次避免未記載的特定配置變更時佈建相同的環境。
Schematics 使用開放程式碼 Ansible 和 Terraform 來提供一組功能強大的 IaC 工具作為服務,以程式設計您的雲端基礎架構。 使用 Schematics,您可以使用這組豐富的 IaC 自動化功能來建置雲端資源堆疊、管理其生命週期、管理其配置中的變更、部署應用程式工作負載,以及執行 day-2 作業。
基礎架構即程式碼的優點
採用 IaC 方法部署基礎結構,可解決佈建基礎結構的許多常見問題,並提供多種優點。Schematics 讓您無需安裝、執行和管理自己的 IaC 工具,即可實現這些優點。
-
可靠性和一致性: 可靠地佈建新的環境或基礎架構。 手動程序會導致錯誤。 使用 IaC 時,相同的配置會反覆地部署,且不會有任何差異。 IaC 可改善環境與部署之間的一致性。
-
速度: IaC 可讓您透過自動化快速設定完整基礎架構。 您可以將它套用至每個環境,從開發到正式作業、暫置、QA 等等。 當部署、管理及維護環境的時間減少時,這可能會導致成本降低。
-
追蹤和責任: 在程式碼中對現有基礎架構進行變更,並追蹤變更。 如同任何原始碼檔案一樣,您可以完整追蹤對配置所做的變更。
-
偵測並更正環境漂移: 如果在程式碼之外手動修改基礎架構的一部分,則可以在下一次執行時使它與想要的狀態保持一致。 漂移偵測 是 Schematics 工作區的特性。
最佳作法
在採用 IaC 進行佈建和組態管理時,有許多建議的作法。 使用 Schematics 時,完全支援這些做法。
在 IaC 中編纂所有內容
所有基礎架構規格都應該明確編碼在組態檔中,例如作為 Terraform 組態或 Ansible playbooks。 配置檔是基礎架構規格的單一事實來源,並說明在其配置中使用哪些基礎架構元件?
將文件縮至最小
IaC 是文件。 有了 IaC,組態檔案就代表了文件,而且總是最新的,這樣就減少了工作量。 其餘文件是關於程序。 維護版本控制系統中的程式碼。
IaC 配置檔應該保留在版本控制系統 (VCS) 中,例如 GitHub 或 GitLab。 這提供程式碼變更的審核追蹤,但也讓您有機會在變更上線之前分工合作或同層級檢閱及測試變更。
使用此作法,您可以透過加強可追蹤性及可見性,輕鬆追蹤、管理及回復系統的任何潛在變更。
測試
IaC 從軟體開發中借用的做法之一就是測試。 基礎架構配置的嚴格測試在減少部署後問題方面扮演著重要角色。 與版本控制系統結合時,只要程式碼中有修改,就會自動觸發測試。
在具備「連續整合 (CI)」的情況下,可以在多個環境中實作範本基礎架構配置,例如 development、UAT、QA 或 production 環境,並有效地套用最小變更。
模組化基礎架構
將基礎架構細分為 模組 可讓您重複使用、改良的可靠性,以及更容易採用的路徑。 類似於在程式設計語言中使用模組和套件。 以下是此作法的好處。
- 常用配置可以編碼為模組,並在環境之間重複使用多次。
- 可靠性會隨著模組的測試而增加,並隨著使用時間而變得更堅固。
- 可重複使用模組的組合可降低採用 IaC 的技能障礙。
- 更容易在模組層次進行變更及測試。
- 當配置變更本地化時,變更的風險會降低。
利用 Terraform IBM 模組
Terraform IBM Modules(TIM) 提供專為 IBM Cloud 設計的生產就緒、可重複使用的基礎架構元件。 這些模組遵循基礎架構即程式碼的最佳實務,大幅降低部署常見 IBM Cloud 服務的複雜性。
探索 Terraform IBM 模組,發現預先建立的 VPC 基礎架構、安全服務、可觀測性等模組。 每個模組都經過 IBM Cloud 專家的徹底測試和維護,以確保可靠性和遵守安全最佳實務。
IaC 的宣告式與命令式方法
採用 IaC, 時,需要考慮的一個方面是您的工具採用什麼方式。 有兩種不同的風格,宣告式或命令式,有時也被描述為程式式。
宣告式方法定義系統所需的狀態,包括您需要的資源及其應該擁有的任何內容,以及工具為您配置的內容。 工具本身會決定從任何起點進入所需狀態的作業。
命令方法會改為定義實現所需配置所需的特定指令,然後需要以正確的順序執行這些指令。
廚師被認為是必要的工具。 Terraform 分類為宣告式。 Ansible 是宣告式,但也可以與命令指令搭配使用。
宣告式 Terraform 和生命週期管理
Schematics 同時支援 Terraform 和 Ansible 作為 IaC 工具,提供 Schematics 工作區和動作。 當生命週期管理非常重要,需要定期建立和拆卸環境時,建議使用具有 Schematics 工作區的 Terraform。 Terraform 會記錄已部署雲端基礎架構的當前狀態,Schematics,無需手動干預,就能以相反的依賴順序移除基礎架構。
Idempotence
Terraform 和 Ansible 使用的聲明式方法的好處是 idempotence。 等冪的作業可以多次執行,並具有相同的最終結果。 在失敗之後重新啟動時,無論先前的狀態或啟動位置為何,佈建的基礎架構與配置一律相同。 這方面是確保使用 Schematics 部署的環境的一致性和可重複性的關鍵。
如何使用工具及使用的模組都對 idempotency 有影響。 一般而言,Terraform 和 Ansible 模組會撰寫成等冪。 使用這兩種工具,我們可以撰寫不會產生等冪結果的程式碼。 在這種情況下,配置可能會從想要的目標狀態漂移。 使用 Terraform,當使用 null-resources 透過非等冪的自訂 Script 來延伸提供者功能時,最有可能發生這種形式的漂移。
不變性是一種 IaC 作法,可將從目標狀態漂移的風險降至最低。
不可變
不可變基礎架構是指管理服務及軟體部署,其中會取代而非變更資源 (例如儲存器或虛擬機器) (使用 Script)。 這裡對不可變性的主要需求是避免配置漂移。 由於本端或手動變更或自動化作業順序中的差異而產生的不一致。 這些變更使除錯和解決問題更加困難,並增加支援成本。
若要確保不可變性並消除漂移,所有變更都應該透過 Schematics IaC 配置進行,並且應該在需要更新時重新部署資源 (例如 VSI)。
下一步
現在您對IaC,為什麼不在Schematics中回顧一下IaC的使用:
- 進一步瞭解 Schematics 中的開放程式碼工具
- 探索這些 使用案例。
- 使用 Terraform IBM 模組(TIM) 加速部署