「DevOps系列」 深刻理解Terraform

今天,我打算寫一系列關於在生產環境中如何使用Terraform定義和管理基礎設施即代碼(如下簡稱IaC)的文章。若是你以前沒有使用過,那麼這裏給一個簡單的定義,Terraform是一種可讓你經過簡單的,可聲明的編程語言來爲各類雲服務商(AWS,Azure,Aliyun等)定義基礎設施而且用一些命令來部署和管理這些基礎設施。shell

在Gruntwork,咱們使用Terraform 做爲Infrastructure as Code Library的主要的IaC工具之一。這是一個爲普遍使用的雲廠商AWS,GCP和Azure提供超過300,000行可重複使用,通過實戰考驗的生產級別的基礎架構代碼的集合。在這篇介紹文章中,咱們會討論咱們爲何會堅信每一個軟件公司都應該使用IaC。接下來咱們會講到以下主題:數據庫

  1. 爲何咱們使用Terraform 而不是Chef,Puppet,Ansible,SaltStack。
  2. Terraform 簡介
  3. 如何管理Terraform 狀態
  4. 如何使用Terraform 模塊建立可複用的基礎設施
  5. Terraform小技巧:循環,條件語句,和各類坑
  6. 團隊中如何使用Terraform

好了,如今言歸正傳。如今咱們開始深刻討論下爲何每一個互聯網軟件公司都應該定義他們的IaC。編程

爲何須要基礎設施即代碼

之前,在遙遠的一個數據中內心。一支古老而富有能力經驗的爲人所知的系統管理員手動來部署基礎設施。每臺服務器、路由表項,數據庫配置和負載均衡器都是經過手動來建立和管理的。那是一個黑暗而恐懼的時代:擔憂宕機,擔憂意外配置文件錯誤,擔憂緩慢而易錯的部署。好消息是感謝DevOps的崛起,咱們如今能夠有更好的方式來處理這些事情:Infrastructure-as-Code(IAC)。服務器

相比於點擊Web界面或者SSH 到一臺服務器,而後手動執行命令。IAC背後的想法是經過寫代碼來定義,拓展和管理你的基礎設施。這有不少好處:微信

  • 你能夠自動化你的整個擴展和部署程序,這使得比手動操做更加快速也更加可靠。
  • 你能夠在源文件中表示整個基礎設施的狀態,這樣任何人的均可以閱讀,而不是隻有管理員才知道。
  • 你能夠版本化存儲這些源文件,這意味着你的基礎設施整個歷史均可以在提交日誌中追溯,這可讓你debug 問題,同時若是必要,徹底能夠回滾到舊版本。
  • 你能夠經過代碼審覈和自動化測試來驗證每次基礎設施的變化。
  • 你能夠建立(或者購買)一系列能夠重複使用,通過實戰考驗的生產級別的基礎架構代碼的集合。

還有另一個重要切格外受關注的緣由:它會然讓開發者更開心。部署代碼是很枯燥和繁瑣的任務。電腦能夠快速而高校地作這些事情,可是人類就會效率低下而易犯錯。還有,開發者會很反感工做。由於這沒有任務創造力,挑戰性以及受人承認。你能夠月復一月地完美地部署代碼,可是沒人會在意和注意這些,知道有一天你出錯了。架構

這些都創造了一種壓力重重而又使人不快的環境氣氛。而IAC 提供了更好的選擇可讓電腦和開發者只作他們自己擅長的事情。負載均衡

爲何是Terraform?

有不少方式能夠實現IAC,從最簡單的手動建立shell 腳本到相似於Puppet、Ansible 等這樣的管理服務。那爲何咱們堅持選擇Terraform最爲咱們的IAC 工具呢?欲知詳情,請看下一節——No1:爲何咱們使用Terraform 而不是Chef,Puppt,Ansible。編程語言

天天三分鐘,知識效率高。輕文章,更高效。工具

天天三分鐘,知識更輕鬆。測試

歡迎關注同名微信公衆帳號極客24h。

相關文章
相關標籤/搜索