基礎(chǔ)架構(gòu)即代碼初學者指南
基礎(chǔ)架構(gòu)即代碼 (IaC) 是使用代碼和軟件開發(fā)技術(shù)配置和管理基礎(chǔ)架構(gòu)的實踐。IaC 背后的主要思想是消除每次部署時對服務(wù)器、負載均衡器或數(shù)據(jù)庫等資源的手動基礎(chǔ)設(shè)施配置和配置的需要。由于基礎(chǔ)架構(gòu)現(xiàn)在是整個軟件開發(fā)過程中不可或缺的一部分,并且與應(yīng)用程序交付的耦合度越來越高,因此讓交付基礎(chǔ)架構(gòu)更改變得更加容易非常重要。
使用代碼定義和管理基礎(chǔ)架構(gòu)及其配置使您能夠采用版本控制、測試和自動部署等技術(shù)。這使得更容易防止各種應(yīng)用程序問題,從性能瓶頸到功能故障。
本文將解釋 IaC 的工作原理,重點介紹這兩種方法,以及在 DevOps 環(huán)境中以代碼形式交付基礎(chǔ)設(shè)施的優(yōu)勢和挑戰(zhàn)。
IaC 是如何工作的?
從歷史上看,基礎(chǔ)架構(gòu)管理主要是由專門的系統(tǒng)管理員完成的手動過程。您需要手動創(chuàng)建虛擬機 (VM)、管理其軟件更新并配置其設(shè)置。這變得非常昂貴和耗時,尤其是隨著現(xiàn)代軟件開發(fā)的快速發(fā)展。
IaC 演變?yōu)榭蓴U展基礎(chǔ)架構(gòu)管理的解決方案。它允許您對基礎(chǔ)架構(gòu)進行編碼,然后能夠創(chuàng)建標準化、可重用和可共享的配置。IaC 還允許您以代碼文件的形式定義基礎(chǔ)設(shè)施配置。例如,圖 1 演示了如何使用 CloudFormation在 AWS 中定義 S3 存儲桶的創(chuàng)建。
當您將基礎(chǔ)架構(gòu)定義為代碼時,您可以實施與應(yīng)用程序開發(fā)代碼相同的做法,例如版本控制、代碼審查和自動化測試。
圖 1:IaC 工作流程
要實施 IaC,您可以使用各種工具和技術(shù),例如:
- 配置管理工具,確?;A(chǔ)架構(gòu)處于您之前定義的所需狀態(tài),例如 Ansible、Chef 或 Puppet。
- 供應(yīng)工具(例如,CloudFormation 模板)允許您以 JSON 或 YAML 文件的形式定義云資源,并在云平臺上供應(yīng)該基礎(chǔ)設(shè)施。
- 容器化工具(例如 Docker、Kubernetes)用于將應(yīng)用程序及其依賴項打包到可以在任何基礎(chǔ)設(shè)施上運行的容器中。
IaC 的方法
有兩種不同的基礎(chǔ)架構(gòu)即代碼方法:命令式(過程式)IaC 和聲明式(功能性)IaC。
使用命令式方法,開發(fā)人員指定 IaC 創(chuàng)建配置所需遵循的確切步驟。用戶完全命令自動化,這使得這種方法對于需要完全控制的更具體的用例很方便。
命令式方法的主要優(yōu)點是它允許您自動執(zhí)行基礎(chǔ)架構(gòu)配置的幾乎每個細節(jié)。這也意味著您需要更高水平的專業(yè)知識來實現(xiàn)這種類型的自動化,因為它主要是通過直接在系統(tǒng)上執(zhí)行腳本來完成的。
以下是使用 AWS CLI 創(chuàng)建 S3 存儲桶的命令式方法示例:
my-new-bucket當您運行此命令時,AWS CLI 將使用該區(qū)域中的名稱創(chuàng)建一個新的 Amazon S3 存儲桶eucentral-1。
使用聲明性方法,開發(fā)人員指定所需的結(jié)果,而無需提供實現(xiàn)該狀態(tài)所需的確切步驟。用戶通過 JSON 或 YAML 等聲明性語言描述他們希望基礎(chǔ)架構(gòu)如何查看。此方法有助于標準化、變更管理和云交付??梢愿斓匕l(fā)布功能,并顯著降低人為錯誤的風險。
以下是使用 AWS CloudFormation 的聲明性基礎(chǔ)設(shè)施即代碼的簡單示例:
該腳本告訴 CloudFormation 創(chuàng)建一個類型為 EC2 的實例t2.micro,CloudFormation 將處理所有必需的步驟以使用您定義的特定屬性實現(xiàn)該狀態(tài)。
圖 2:IaC 方法概述
IaC 的好處和挑戰(zhàn)
基礎(chǔ)架構(gòu)即代碼是 DevOps 中的關(guān)鍵實踐之一,提供了許多節(jié)省時間和金錢以及降低風險的好處。但與您在組織中采用的任何工具、解決方案或?qū)嵺`一樣,重要的是要權(quán)衡實施 IaC 方法時可能面臨的挑戰(zhàn)。
表 1:IaC 優(yōu)勢與挑戰(zhàn)——需要考慮的因素
結(jié)論
借助 IaC,系統(tǒng)可以輕松復(fù)制和重用;過程是一致的。隨著 DevOps 文化變得越來越普遍,通過 IaC 保持戰(zhàn)略優(yōu)勢可能會成為一個越來越重要的目標。如果您所在的組織旨在在其現(xiàn)有流程中實施基礎(chǔ)架構(gòu)即代碼,那么了解您的團隊可能遇到的好處和挑戰(zhàn)會很有幫助。訣竅是在了解您的業(yè)務(wù)基礎(chǔ)設(shè)施需求和認識到 IaC 提供的改進潛力之間找到一個很好的界限。
為確保正確實施 IaC,從小事做起很重要。您希望逐漸增加任務(wù)的復(fù)雜性,避免使代碼庫過于復(fù)雜,持續(xù)監(jiān)控 IaC 實施以確定需要改進和優(yōu)化的領(lǐng)域,并繼續(xù)自學 IaC 中的不同工具、框架和最佳實踐。
查看這些額外資源以繼續(xù)了解 IaC:
- 開始使用 IaC , DZone Refcard
- IaC 安全:核心 DevOps 實踐以保護您的基礎(chǔ)架構(gòu)即代碼,DZone Refcard
- “基礎(chǔ)架構(gòu)即代碼:保護應(yīng)用程序的 6 個最佳實踐”,作者 Jim Armstrong
- Marija Naumovska 的“基礎(chǔ)設(shè)施即代碼的 5 個最佳實踐”
- “最佳基礎(chǔ)設(shè)施即代碼工具 (IaC):2023 年的前 11 名”,作者:Florian Pialoux