基礎架構即程式碼(IaC)自動化佈建技術與公雲導入應用


壹  前言

隨著數位化轉型的加速,許多企業採取「雲端優先」(Cloud-First)策略,將IT基礎架構優先部署於雲端,以充分利用其彈性、擴展性和成本效益。然而,為了有效地管理雲端資源,基礎設施即程式碼(Infrastructure as Code,IaC)成為非常便利的管理工具。企業透過IaC能以程式碼的形式以自動化佈建、管理和維護雲端基礎設施,確保更高的一致性、效率和可重複性,從而加速創新以回應市場需求。本文將簡述透過IaC技術導入公雲平台,滿足不斷變化的業務需求。

貳  科技發展現況

一、 傳統部署

早期的基礎設施管理主要仰賴於IT人員手動配置,各種安裝和設定過程如果發生問題皆須透過人員過往維運經驗及專業知識來進行排除。為了後續管理經驗傳承及工作職務交接,亦會撰寫標準操作程序(SOP)文件來記錄處理步驟及流程。然而這樣繁瑣的人工操作步驟往往容易出錯,並且耗費大量時間成本,因為每個環境存在的些微差異,例如作業系統版本或網路架構配置,皆可能會導致相同的手動流程在不同環境中造成不同的結果。由於這種手動方式難以維持一致性和效率,因此越來越多的企業開始傾向於使用程式化的方法來實現基礎設施管理,「基礎設施即程式碼(IaC)」技術就是期望解決這項議題。

二、 IaC技術介紹

「基礎設施即程式碼(IaC)」是一種將基礎設施的組態設定和配置過程轉化為程式碼的技術,使其可以像應用程式碼一樣進行定義和管理,從而實現自動化部署。不僅可以提高部署過程的自動化程度,還能確保一致性和可重複性,且IaC的程式碼也可以通過版本控制工具(如Git)來管理基礎設施的配置與變更。

IaC還允許根據不同的環境需求(如開發、測試或生產環境)靈活調整配置參數。通過重複利用程式碼模組,企業可以快速根據業務需求擴展或縮減基礎設施,自動化複製建立固定的初始環境,避免因手動操作導致的差異和錯誤。

三、 公雲平台原生IaC工具

隨著公有雲的興起,許多企業為了加速將基礎設施部署至雲端,開始使用三大公有雲平台所提供的「基礎設施即程式碼(IaC)」工具。這些工具包括AWS的CloudFormation、Azure的ARM Templates和Google Cloud的Deployment Manager。每個工具都提供了一套專屬於其平台的語法和特性,幫助企業自動化管理雲端基礎設施,提升部署效率。

隨著公雲平台提供的服務越來越多樣性,費用成本也有所差異,企業開始陸續導入多雲架構,每個公有雲平台的語法、操作方式及配置特性各不相同,這不僅增加了學習成本,還使得多種平台間的整合與維護變得困難且繁瑣。

四、 跨平台IaC工具

Terraform是一個可管理多種雲平台基礎設施配置的工具,無論是AWS、Azure還是Google Cloud,都可以透過相同的宣告式配置語言和框架進行管理,這不僅大大降低了學習多種雲端工具的操作成本,還提高了多雲架構下的管理效率。透過Terraform腳本開發,企業可以簡化操作流程,集中管理不同雲環境中的資源,從而實現更高效和一致的基礎設施自動化。

Terraform供裝流程可分為三個階段,如下圖1所示:

1 Init階段:初始化工作資料夾,下載不同平台間溝通所需要的套件。
2 Plan階段:產生執行計畫,讓使用者了解這次會新增或變更的資源。
3 Apply階段:實際部署資源至公雲環境。

圖1 Terraform流程圖

對於原本僅於單一公雲平台申租服務的用戶,如有朝多雲架構方向的規劃,目前公雲平台對於Terraform的支援度很高,也可透過相關服務技術來大幅降低移轉門檻。Azure 提供了Azure Export for Terraform 功能,允許將現有的 Azure 資源導出為 Terraform 配置文件。AWS和Google Cloud雖然沒有官方的導出功能,但可以使用開源的Terraformer工具來完成類似的任務,導出現有資源並轉換成Terraform腳本。

五、 IaC面臨的挑戰

「基礎設施即程式碼(IaC)」雖然帶來了許多自動化和一致性的優勢,但在實施過程中仍面臨許多挑戰。

首先,狀態管理是一個核心問題,當多團隊協作時,若狀態文件沒有適當管理,可能會導致版本衝突或同步問題。Terraform Enterprise(Terraform 的商用版本)提供了一個集中式的狀態存儲,允許團隊共享和協作相同的狀態文件,透過內建的鎖定機制來確保同一時間只有一個操作可以修改狀態,這防止了多個用戶同時執行而導致資源衝突的狀況,當一個操作鎖定了狀態,其他用戶會被提示等待,直到該操作完成後才能繼續。

在腳本操作上安全性也很重要,Terraform Enterprise 提供了強大的安全控制功能,可以控制哪些用戶和團隊可以查看或修改狀態文件。透過角色和權限設置,團隊可以細緻地定義哪些用戶可以執行操作,確保只有授權人員可以修改基礎設施。

基礎設施會隨著系統功能及服務規模持續成長,導致使用到的資源會越來越多,部署腳本也需相應進行反覆擴展,造成管理負擔變重。透過將常用的資源打包成模組,可把特定任務的資源統一收容以提供重複利用,藉此保持腳本內容的簡潔度以方便閱讀。此外各個模組都須獨立定義雲端供應商以及規格參數設定,但由於系統於單一雲端平台大多會使用相似設定,會發現腳本內存在許多重複的內容,因而提升維護的複雜度。針對此項議題,Terragrunt (Terraform的包裝工具)可將相同的環境設定獨立為單一檔案提供共享,在執行部署流程時再將資訊傳遞給Terraform並動態生成相應案場所需之配置檔案,圖2說明Terraform在供裝時能利用Terragrunt載入不同案場(qa, stage, prod)之環境參數。

圖2 Terragrunt流程示意圖

IaC工具的語法和操作方式各有不同,對於新申請公雲服務用戶或多雲環境管理人員來說,掌握這些工具都需要投入相當多的時間與精力,研究院推動Terraform腳本開發與共享,將常用的資源進行模組化,提供院內開發人員能快速學習與上手。

雖然IaC在自動化和效率提升方面展現了巨大的潛力,但企業在使用這些工具時必須解決這些挑戰,才能真正發揮其最大價值。

參  結論

隨著企業對雲端依賴的增加,「基礎設施即程式碼(IaC)」技術的應用變得越來越重要。通過自動化的部署流程,IaC不僅提高運營效率,還確保了部署的一致性與穩定性,提供了一個靈活且強大的基礎設施部署工具。

三大公雲原生工具(AWS CloudFormation、Azure Resource Manager Template和Google Cloud Deployment Manager)提供與自身雲端平台的深度整合,可對各自平台提供的服務進行規格及參數設定,從而達到雲端資源的最佳化管理。Terraform則支援跨平台整合,在靈活性和具有廣泛的供應商生態系統而受到歡迎,使其成為多雲環境的理想選擇。以上工具各有優缺點,適用於不同的場景和需求,在使用上還是要基於業務規劃及平台選擇進行判斷,才能透過IaC技術更便利地建置與管理入雲服務。

近期隨著AI人工智慧的蓬勃發展,預期未來加入AI輔助也將能夠提升IaC的效率並簡化管理複雜度。透過AI的自動化分析,可以在基礎設施部署中實現動態資源調整和最佳化資源分配,有效降低運營成本;由AI協助進行自動化代碼審查或測試驗證,以利加速發現問題,提升基礎設施配置的安全性與可靠度。

肆  參考文獻

[1]“What is Infrastructure as Code with Terraform?,”Available at: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/infrastructure-as-code
[2]“Terraform vs. CloudFormation vs. ARM vs. Deployment Manager,”Available at: https://devtoys.io/2024/07/09/terraform-vs-cloudformation-vs-arm-vs-deployment-manager/
[3]“Terragrunt Quick start,”Available at: https://terragrunt.gruntwork.io/docs/getting-started/quick-start/
[4]“What are ARM templates?,”Available at: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview
[5]“Google Cloud Deployment Manager documentation,”Available at: https://cloud.google.com/deployment-manager/docs
[6]“AWS CloudFormation,”Available at: https://aws.amazon.com/tw/cloudformation/
[7]“Terraform Cloud V.S. 開源版拼裝車,”Available at: https://medium.com/starbugs/terraform-cloud-v-s-%E9%96%8B%E6%BA%90%E7%89%88%E6%8B%BC%E8%A3%9D%E8%BB%8A-6ce9a5822a26
[8]“Terraformer,”Available at: https://github.com/GoogleCloudPlatform/terraformer
[9]“使用人工智慧增強IaC 以提高下一代基礎設施的效率,”Available at: http://www.hkjs.com/node/3922.html