什麼是基礎設施即程式碼(IaC)

不以手動作業,而以程式碼(定義檔)描述伺服器、網路、儲存等基礎設施的組成,並以工具自動建立與變更的方法。宣告式工具撰寫的是「應有的組成」,工具只套用與實際狀態的差異,因此同一個定義不論套用幾次結果都相同(冪等性)。把定義以 Git 等管理,就容易保留變更歷程、進行審查,以及重現相同的環境。

日文名稱: IaC(Infrastructure as Code)

「基礎設施即程式碼(IaC)」出現在1領域的1道練習題中(雲端與容器基礎等)。

這個名詞所屬的領域: 雲端與容器基礎

宣告式與程序式

宣告式寫法寫的是「2台虛擬機器」這樣的結果,由工具與目前狀態比較來決定需要的操作。程序式寫法依序寫出「建立1台虛擬機器」這樣的操作,因此必須考慮目前的狀態,例如執行2次就會變成4台。基礎設施的組成常使用容易得到冪等性的宣告式方法。

組態漂移

若有人從管理畫面等手動變更設定,實際狀態就會與程式碼不一致(漂移)。宣告式工具會在套用前顯示差異,因此能發現這種不一致。若規定所有變更都必須透過程式碼進行,環境的狀態就能持續與程式碼一致。

審查與重現

把定義檔像程式一樣以 Git 管理,就能留下誰在何時改了什麼,並在套用變更前進行審查。以同一份定義建立預備環境與正式環境,也能減少環境差異造成的問題。密碼等機密值不直接寫在定義檔中,而以專用機制管理。

練習基礎設施即程式碼(IaC)的題目

以宣告式的 IaC(基礎設施即程式碼)工具,套用定義了網路與2台虛擬機器組成的檔案,建立了環境。緊接著在不做任何變更的情況下再次套用同一個檔案,此時發生的事,下列何者適當?

  1. A定義與實際狀態沒有差異,因此不做任何變更
  2. B再建立一組相同的組成,虛擬機器變成4台
  3. C因為環境已經存在,第2次套用會發生錯誤而中斷
查看答案與解析

正確答案:A. 定義與實際狀態沒有差異,因此不做任何變更

在宣告式 IaC 中,程式碼寫的不是步驟而是「應有的組成」,工具與實際狀態比較後,只建立、變更、刪除有差異的部分。因此同一個定義不論套用幾次,結果都相同(冪等性),第2次不會發生變更。若有人手動變更設定,使實際狀態偏離定義(組態漂移),下次套用時會回到定義的狀態。把定義以 Git 管理,也能像程式一樣確認變更歷程並進行審查。

常見問題

使用 IaC 就不再需要手動設定了嗎?

大多數作業都能寫成程式碼,但像最初的認證設定等,仍有需要手動的部分。重要的是不要放任手動變更的部分,而是把它納入程式碼,讓程式碼與實際狀態保持一致。

IaC 與容器有什麼關係?

IaC 用來建立網路、虛擬機器、叢集等基礎,而在上面運作的應用程式多半以容器映像檔的形式發布。Kubernetes 的資訊清單(manifest)在宣告期望狀態這一點上,也與 IaC 基於相同的想法。

解析中的「基礎設施即程式碼(IaC)」

出現「基礎設施即程式碼(IaC)」的題目(1題)

  1. 以宣告式的 IaC(基礎設施即程式碼)工具,套用定義了網路與2台虛擬機器組成的檔案,建立了環境。緊接著在不做任何變更的情況下再次套用同一個檔案,此時發生的事,下列何者適當?

相關名詞

Git 不可變基礎設施 可用區域 可觀測性 共同責任模型 自動擴展 物件儲存 金絲雀部署 容器技術 容器映像檔

前往名詞解釋列表