跳至主要内容

IaC

IaC​

What?​

Infrastructure as Code (IaC) 是一種使用程式碼來管理和佈署基礎架構的技術。簡單來說,透過撰寫程式碼,技術人員可以定義伺服器、網路、資料庫等資源的配置,而取代了手動操作或點選介面。這個概念類似於「建築藍圖」,只是它是用程式語言寫成的。

例如,你如果需要佈署 10 台伺服器並設定它們的網路規則,傳統方式可能需要逐台設定。但使用 IaC ,只需撰寫一份腳本,執行後即可自動完成所有配置。


Who?​

主要使用者包括:

  • DevOps 工程師:負責基礎架構自動化和維運。
  • 系統管理員:需要快速、大規模佈署資源。
  • 開發者:在開發與測試環境中快速建立所需的基礎架構。
  • 雲端架構設計師:設計跨平台或混合雲環境。

受影響的對象通常是企業內部 IT 團隊以及相關應用系統的使用者。例如,一家公司需要擴展伺服器以支援高流量,IT 團隊就會運用 IaC 快速執行這項任務。


When?​

你會在以下情況下使用 IaC:

  1. 頻繁佈署需求時:例如每日更新測試環境。
  2. 大規模佈署時:如建立數百台 VM(Virtual Machine)。
  3. 版本控制需求時:需要追蹤基礎架構更改歷史。
  4. 災難復原時:快速還原遺失或損壞的基礎架構。

舉例來說,在一個新產品上線前夕,團隊可能需要在短時間內建立數十台伺服器並設定防火牆規則,此時 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 的目的是解決傳統基礎架構管理中的多項問題,包括:

  1. 手動操作易出錯:透過程式碼可避免人為疏失,例如設定錯誤導致系統崩潰。
  2. 效率低下問題:自動化腳本可節省大量時間。
  3. 不可追溯性問題:傳統手動修改無法記錄變更詳細內容,而 IaC 可結合 Git 進行版本控管。
  4. 擴展性差異問題:適合大規模和多樣化環境,例如多雲部署。

比喻來說,若將系統比作一座城市,那麼 IaC 就像城市建設中的模板工廠——能快速且一致地生產「建築物」(即 IT 資源)。


How?​

🛠️ 建立階段​

  1. 選擇適合你的工具(如 Terraform 或 CloudFormation)。
  2. 編寫描述文件(通常是 .yaml 或 .json 格式),定義所需資源及其屬性。例如:
    resource "aws_instance" "example" {
    ami = "ami-0c55e98b"
    instance_type = "t2.micro"
    }
  3. 測試腳本是否正確執行,例如在 Dev 環境先試跑。
  4. 執行命令佈署資源,例如 terraform apply 。

🔍 查詢階段​

  1. 使用工具查詢目前狀態,例如 terraform show 查看已創建資源的細節。
  2. 比較配置文件與現有狀態是否一致,例如透過 terraform plan 檢視差異。
  3. 若有異常,可回溯變更紀錄並調整腳本重新執行,再次查詢確認結果。

補充說明​

🔧 關鍵技術工具​

工具名稱功能特色適用場景
Terraform多平台支持、高度可移植性雲端混合部署、跨平台需求
AWS CloudFormation深度整合 AWS 原生服務專注於 AWS 平台
Ansible配置管理、自動化任務執行軟體安裝、設定檔分發
Puppet基礎架構配置管理資料中心內部環境
Chef基於 Ruby 的高階自動化框架複雜應用部署

📌 範例比較​

以下是 Terraform 與 AWS CloudFormation 的功能比較:

功能TerraformAWS CloudFormation
支援平台範圍多家公有雲及私有雲僅支援 AWS
語法複雜度簡單直覺嚴謹但稍具挑戰性
社群支持強大相對較少

🧠 延伸/常見誤解​

  1. 誤解:「 IaC 是只適用於雲端」——事實上,它也適用於資料中心內部或混合型環境,只要能以程式碼描述即可套用。
  2. 誤解:「 IaC 很難學」——初期可能稍具挑戰,但隨著工具文件完善及社群支持,它已經越來越容易上手。

此外,有些人會將 IaC 與 Configuration Management 混淆,但兩者核心不同。IaC 著重於描述如何「創建」基礎架構,而 Configuration Management 則負責「維護」已存在的系統狀態,例如安裝軟體或更新設定檔案。