IaC
IaC
What?
Infrastructure as Code (IaC) 是一種使用程式碼來管理和佈署基礎架構的技術。簡單來說,透過撰寫程式碼,技術人員可以定義伺服器、網路、資料庫等資源的配置,而取代了手動操作或點選介面。這個概念類似於「建築藍圖」,只是它是用程式語言寫成的。
例如,你如果需要佈署 10 台伺服器並設定它們的網路規則,傳統方式可能需要逐台設定。但使用 IaC ,只需撰寫一份腳本,執行後即可自動完成所有配置。
Who?
主要使用者包括:
- DevOps 工程師:負責基礎架構自動化和維運。
- 系統管理員:需要快速、大規模佈署資源。
- 開發者:在開發與測試環境中快速建立所需的基礎架構。
- 雲端架構設計師:設計跨平台或混合雲環境。
受影響的對象通常是企業內部 IT 團隊以及相關應用系統的使用者。例如,一家公司需要擴展伺服器以支援高流量,IT 團隊就會運用 IaC 快速執行這項任務。
When?
你會在以下情況下使用 IaC:
- 頻繁佈署需求時:例如每日更新測試環境。
- 大規模佈署時:如建立數百台 VM(Virtual Machine)。
- 版本控制需求時:需要追蹤基礎架構更改歷史。
- 災難復原時:快速還原遺失或損壞的基礎架構。
舉例來說,在一個新產品上線前夕,團隊可能需要在短時間內建立數十台伺服器並設定防火牆規則,此時 IaC 就能大幅簡化流程。
Where?
IaC 主要出現在以下架構部分:
- 雲端平台(Cloud Platforms):如 AWS 、 Microsoft Azure 、 Google Cloud 等。
- 容器化環境(Containerized Environments):如 Kubernetes 、 Docker Swarm 等。
- CI/CD 管道(Continuous Integration/Continuous Deployment Pipelines):將資源配置整合進自動化工作流程中。
例如,你可以用 Terraform 定義 AWS 上的 VPC (Virtual Private Cloud)、子網路及安全性群組;或用 Ansible 設定 Kubernetes Cluster 節點上的軟體環境。
Why?
IaC 的目的是解決傳統基礎架構管理中的多項問題,包括:
- 手動操作易出錯:透過程式碼可避免人為疏失,例如設定錯誤導致系統崩潰。
- 效率低下問題:自動化腳本可節省大量時間。
- 不可追溯性問題:傳統手動修改無法記錄變更詳細內容,而 IaC 可結合 Git 進行版本控管。
- 擴展性差異問題:適合大規模和多樣化環境,例如多雲部署。
比喻來說,若將系統比作一座城市,那麼 IaC 就像城市建設中的模板工廠——能快速且一致地生產「建築物」(即 IT 資源)。
How?
🛠️ 建立階段
- 選擇適合你的工具(如 Terraform 或 CloudFormation)。
- 編寫描述文件(通常是 .yaml 或 .json 格式),定義所需資源及其屬性。例如:
resource "aws_instance" "example" {ami = "ami-0c55e98b"instance_type = "t2.micro"}
- 測試腳本是否正確執行,例如在 Dev 環境先試跑。
- 執行命令佈署資源,例如
terraform apply。
🔍 查詢階段
- 使用工具查詢目前狀態,例如
terraform show查看已創建資源的細節。 - 比較配置文件與現有狀態是否一致,例如透過
terraform plan檢視差異。 - 若有異常,可回溯變更紀錄並調整腳本重新執行,再次查詢確認結果。
補充說明
🔧 關鍵技術工具
| 工具名稱 | 功能特色 | 適用場景 |
|---|---|---|
| Terraform | 多平台支持、高度可移植性 | 雲端混合部署、跨平台需求 |
| AWS CloudFormation | 深度整合 AWS 原生服務 | 專注於 AWS 平台 |
| Ansible | 配置管理、自動化任務執行 | 軟體安裝、設定檔分發 |
| Puppet | 基礎架構配置管理 | 資料中心內部環境 |
| Chef | 基於 Ruby 的高階自動化框架 | 複雜應用部署 |
📌 範例比較
以下是 Terraform 與 AWS CloudFormation 的功能比較:
| 功能 | Terraform | AWS CloudFormation |
|---|---|---|
| 支援平台範圍 | 多家公有雲及私有雲 | 僅支援 AWS |
| 語法複雜度 | 簡單直覺 | 嚴謹但稍具挑戰性 |
| 社群支持 | 強大 | 相對較少 |
🧠 延伸/常見誤解
- 誤解:「 IaC 是只適用於雲端」——事實上,它也適用於資料中心內部或混合型環境,只要能以程式碼描述即可套用。
- 誤解:「 IaC 很難學」——初期可能稍具挑戰,但隨著工具文件完善及社群支持,它已經越來越容易上手。
此外,有些人會將 IaC 與 Configuration Management 混淆,但兩者核心不同。IaC 著重於描述如何「創建」基礎架構,而 Configuration Management 則負責「維護」已存在的系統狀態,例如安裝軟體或更新設定檔案。