基礎設施即代碼 (IaC) 是一個自動化云資源供應和管理的過程。IaC 軟件采用一些描述所需狀態(tài)的輸入腳本,然后通常通過 API 與云供應商進行通信,以使現(xiàn)實與所需狀態(tài)相匹配。本文將涵蓋 IaC 的重要方面,首先是它是如何產(chǎn)生的(即它解決了哪些問題),然后是它的好處,最后是如何將 IaC 集成到您的組織中。
對 IaC 的需求
曾幾何時,當企業(yè)想要運行軟件時,唯一的選擇是從網(wǎng)絡提供商處訂購一些物理設備和互聯(lián)網(wǎng)接入。這些是現(xiàn)場數(shù)據(jù)中心,公司必須根據(jù)預期流量提前數(shù)周甚至數(shù)月訂購服務器和網(wǎng)絡設備,然后在現(xiàn)場手動配置。這需要一個帶有冷卻系統(tǒng)的物理位置和無數(shù)小時來執(zhí)行安裝和維護操作。但是后來,出現(xiàn)了可以管理其他企業(yè)服務器的公共數(shù)據(jù)中心。
運營數(shù)據(jù)中心本身成為一項可行的業(yè)務,為客戶帶來巨大優(yōu)勢:
- 無需專用且昂貴的服務器機房
- 通用服務器和網(wǎng)絡項目的交貨時間可能會縮短
- 由數(shù)據(jù)中心提供商處理的服務器/設備的物理管理
- 釋放寶貴的資源
虛擬化的出現(xiàn)帶來了另一種演變:云。在公共(或私有)云中,物理設備位于云供應商的數(shù)據(jù)中心,仍然需要人工處理。虛擬服務器可通過 Web 界面供企業(yè)使用,使他們能夠在幾秒鐘內(或最大資源的幾分鐘內)配置服務器和其他資源。在這個階段,雖然虛擬化允許非常快速的配置,但大多數(shù)操作仍然是手動的。
IaC 概念和工具的出現(xiàn)帶來了最終的發(fā)展。一旦可以通過 API 訪問云,資源的配置和管理就可以由腳本和自動化工具而不是人工來處理。所以現(xiàn)在,一旦安裝并連接了物理設備(仍然是手動操作),其他一切都可以自動化,包括所有虛擬硬件資源的配置。
以編程方式訪問公共云的能力促成了 IaC 的興起。在 IaC 出現(xiàn)之前,系統(tǒng)工程師必須手動通過 Web 界面來供應和配置資源。使用 IaC,資源的供應和配置在腳本中描述,這些腳本由與公共云 API 通信的工具讀取,以確保現(xiàn)實與所需狀態(tài)相匹配。
IaC 的好處
如上所述,IaC 工具使用來自腳本的輸入;這些腳本由人類編寫,描述了給定云資源的理想狀態(tài)。這些工具通過其 API 與云供應商通信以創(chuàng)建、更新或刪除資源,以便現(xiàn)實與輸入腳本中描述的所需狀態(tài)相匹配。與手動供應和配置相比,IaC 提供了單一的真實來源(輸入腳本),從而消除了大多數(shù)人為錯誤。
運行 IaC 腳本是一個可重復的操作,每次都會產(chǎn)生完全相同的結果。這可以在很多方面提供幫助,例如:
- 在不同位置和/或為不同項目部署相同的工作負載
- 創(chuàng)建單獨但相同(或接近相同)的環(huán)境(暫存、生產(chǎn)、測試??等)
- 通過從 IaC 腳本和生產(chǎn)環(huán)境的最后備份快速創(chuàng)建一個新的、相同的環(huán)境來執(zhí)行災難恢復
IaC 腳本可以保存在 git 存儲庫中,為您提供基礎架構的歷史記錄。作為額外的好處,由于腳本只是文本,因此可以比較版本以查看已添加、更改或刪除的內容。
另一個好處是 IaC 允許初級系統(tǒng)管理員或非技術人員在沒有技術知識的情況下創(chuàng)建整個工作負載。如果您正確配置您的云帳戶,您甚至可以允許具有有限權限的用戶通過 IaC 工具創(chuàng)建這樣的工作負載,即使該用戶沒有直接創(chuàng)建資源的權限。您還可以利用額外的工具和模板來確保更早地實施安全策略,以限制實例化 IaC 堆棧的任何人造成安全漏洞和錯誤配置的可能性。
除了精確的可重復性之外,IaC 相對于手動操作的最大優(yōu)勢之一是它的可擴展性。事實上,您只需編寫一次 IaC 腳本,然后工作負載就可以隨心所欲地實例化,幾乎是即時的。最后,通過花更多時間在 IaC 腳本中設計正確的權限,可以避免手動工作向角色和資源授予過多權限的典型缺點。
如何開始
通常,您希望將當前手動執(zhí)行的一些操作自動化。因此,第一步是記錄構建工作負載所需基礎架構所需的手動步驟。這些是您將通過 IaC 自動化的步驟。
然后你需要選擇一個 IaC 軟件。這應該不是一個困難的選擇,因為只有少數(shù)幾個,而且三大云提供商都有自己的:Amazon Web Services 提供CloudFormation,Microsoft Azure 提供Azure Resource Manager,Google Cloud Platform 提供Google Cloud Deployment Manager。與供應商無關的最著名的選項是Terraform,它不僅支持上述三個云供應商,而且支持更多云供應商。
接下來,您需要為您選擇的 IaC 工具編寫一些腳本,以重現(xiàn)您記錄的手動步驟。在進行過程中測試這些通常是個好主意。換句話說:編寫一些 IaC 代碼,部署它,測試它,當你滿意它看起來不錯時,繼續(xù)下一段代碼。如果一次性編寫所有內容,代碼中可能會出現(xiàn)重大缺陷,只有在工作數(shù)小時后才會發(fā)現(xiàn),這意味著您可能不得不重寫腳本的很大一部分。
左移
此外,Shift Left 的話題也持續(xù)上熱搜。這實質上意味著您盡早開始測試并專注于預防問題(而不是在問題發(fā)生后檢測和解決)。這個想法是整體質量和安全性將因此提高。
理想情況下,這種左移應該盡可能地利用自動化。事實上,有多種工具可用于自動化編寫 IaC 腳本的某些方面,例如安全性和合規(guī)性。這些工具會在任何部署之前掃描代碼,以減少錯誤配置、過于寬松的設置和已知漏洞等問題的發(fā)生。此處提供了一些與此相關的用例供您細讀。
需要一個集中的團隊
為了正確使用 IaC,編寫 IaC 腳本的人必須對所使用的云平臺有深入的了解。因此,建議確保您的 IaC 工作中最關鍵的部分由高級 DevOps 工程師完成。
擁有一支(或至少一名)高級 DevOps 工程師團隊負責領導您的 IaC 工作通常是個好主意。該團隊將能夠專注于最佳實踐和安全性,從而為更多初級工程師提供可遵循的藍圖。它還將能夠編寫可在組織內跨 IaC 腳本重復使用的通用模塊,為更多初級工程師提供易于使用的預先審查的構建塊。
如果嚴格的安全性很重要,并且很可能這個團隊也可以負責審查公開可用的模塊和軟件。在網(wǎng)上很容易找到一些 IaC 模塊;Terraform 甚至擁有這些的官方存儲庫。但是,此類公開可用的模塊可能不符合您的組織或項目中應用的安全標準。因此,確保您的 IaC 團隊只使用經(jīng)過審查的模塊非常重要。
此外,讓您的 SecOps 團隊與您的 DevOps 團隊一起工作是個好主意。這種合作將使 DevOps 流程在項目早期的安全性方面得到優(yōu)化。生產(chǎn)部署后檢測到的錯誤可能代價高昂,尤其是在客戶關系方面。在過程的早期確保高質量將大大有助于避免任何此類災難。
結論
雖然 IaC 是最近才發(fā)展起來的,但現(xiàn)在 IaC 應該成為任何需要云資源的組織的配置策略的重要組成部分,并且至少應該對其進行評估以包含在您的團隊中。無論您的組織規(guī)模如何,您很可能希望 IaC 至少管理您的部分工作負載。