不論是對於企業或開發者而言,不斷精簡流程、提高效率一直都是重要的課題。其中一種有效的工具是基礎架構即程式碼 (Infrastructure as Code, IaC),這不僅提供了更方便地管理方式,更維持了 infra 的穩定性與可靠性。但是我們為什麼要使用 IaC 呢?
我們可以到 AWS 的產品列表上看看,一共有 322 種產品。試想,當專案跨足了至少 10 幾種雲端服務(幾乎是常有的事),而 SRE 或 DevOps 工程師只能在 console 上面人工點點戳戳,這段手動配置的時間就成了最大的浪費。除此之外,手動配置也包含了極大的出錯風險。假設某位 SRE 希望開兩台 EC2,而在 console 上的各種選項中,他就是忘了修改 EC2 所屬的 VPC,於是就開始開發了,但開發者不管怎樣就是碰不到服務本身,花了一堆精力才發現是 VPC 的問題 … 等,諸如此類的 UI 限制都可能導致人為疏失。
不過,當組織導入 IaC 之後,情況就變得大不相同。在上述的手動配置失誤情境中,假設導入了 IaC(以下皆以 Terraform 為例),則定義 EC2 需要的必填欄位裡一定包含了 VPC 的 id,因此基本上不會有這種錯誤產生。再來,採用了 IaC 等於使用程式碼定義 infra 的架構,這更衍伸了四種好處:
pre-commit-terraform
或者 tflint
進行檢查,讓錯誤率再進一步降低。另外,要實現 IaC 的目標,許多組織和開發團隊轉向了各種工具來管理基礎架構的程式碼。其中,Terraform 是一個廣受歡迎的選擇。Terraform 是一個開源工具,由 HashiCorp 公司開發,它允許工程師們以純粹的程式碼形式定義和管理 infra,無論這些 infra 位於任何雲端服務提供商(如 AWS、Azure、Google Cloud 等)甚至是 local infra provider 也行。
我相信大家在第一次看到 Terraform 的設定檔時,一定會不知所措,我也一樣。在我第一次接觸 Terraform 時,我就真當他是一般的程式碼,從 main.tf
這個檔案開始讀起。但問題是沒人跟我講過運作原理,當時的我其實不管從哪開始讀都是徒勞無功。而當我在真正成為 SRE 之後,老大第一個教我們的就是 Terraform 的運作原理(我只能說是超級感謝,老大真的花了很多時間在我跟夥伴身上),在這之後讀起各種設定檔的那種不安感才漸漸消失。
在我的觀點裡,Terraform 有三個最重要的概念:Provider、State 和 Modules
明天會繼續深入介紹 Provider / State / Module 這三者的運作原理,並且帶入實際案例介紹 module 的檔案結構、以及實際上的程式碼應該要長怎樣。