Module 讓 Terraform 使用更簡單

衆所周知,Terraform 是一個開源的自動化的資源編排工具,支持多家雲服務提供商。阿里雲做爲第三大雲服務提供商,terraform-alicloud-provider 已經支持了超過 90 多個 Resource 和 Data Source,覆蓋20多個服務和產品,吸引了愈來愈多的開發者加入到阿里雲Terraform生態的建設中。數據庫

隨着 Resource 和 DataSource 的不斷增長和完善,業務架構的不斷髮展,Terraform 模板編寫的成本和複雜度也在不斷的增長。如何讓Terraform 模板更加簡單和重用,就是本文所要解決的問題。網絡

本文將經過一個典型的負載均衡架構,向你們介紹如何使用 Module 簡化 Terraform 的模板。架構

clipboard.png

如圖所示,這個架構中,包含 ECS 實例,SLB 實例,RDS 實例,OSS 等資源和服務,同時全部的 ECS,RDS 和部分 SLB 在一個 VPC 網絡環境中。負載均衡

將全部Resource放在一個模板中進行統一管理

面對這樣的一個架構,模板能夠有多種寫法。一般的寫法是將架構中涉及到的全部資源寫到一個模板中,並經過參數和關係型 resource 將這些資源關聯起來,以下所示:ide

clipboard.png

這樣寫的好處是,全部資源都在一個模板中管理,編寫時能夠很清楚瞭解資源之間的引用關係;可是,當資源不斷增長時,擴展很是不靈活,資源間關係越複雜,模板越難以維護。工具

分類管理,目錄做爲單元化資源

從架構圖和上文模板中不難看出,並非全部的Resource都有直接關聯關係,好比VPC只和VSwitch和SecurityGroup有關,與其餘資源的建立無直接關聯關係。所以,爲了使整個架構的邏輯能夠更加清楚的展現在模板中,咱們能夠考慮,對資源進行分類,將每一類資源用一個單獨的目錄進行管理,最後用一個模板來管理全部的目錄,進而完成對全部資源及資源關係的串聯,以下所示:阿里雲

clipboard.png

將該架構中的資源分爲網絡(VPC),負載均衡(SLB),計算(ECS),數據庫(RDS)和存儲(OSS)這幾類,而後將上文模板中的資源分別在對應的目錄中予以實現。spa

接下來,用統一的模版main.tf將這些目錄關聯起來,以下所示:架構設計

clipboard.png

能夠看出,main.tf中資源的結構更加清楚,更加接近於架構圖。設計

同時,你們已經注意到了,main.tf引入了一個 module,經過module將資源目錄串聯起來。

什麼是Module

Module 是 Terraform 爲了管理單元化資源而設計的,是子節點,子資源,子架構模板的整合和抽象。正如本文架構中提到的,在實際複雜的技術架構中,涉及到的資源多種多樣,資源與資源之間的關係錯綜複雜,資源模版的編寫,擴展,維護等多個問題的成本都會不斷增長。將多種能夠複用的資源定義爲一個module,經過對 module 的管理簡化模板的架構,下降模板管理的複雜度,這就是module的做用。

除此以外,對開發者和用戶而言,只需關心 module 的 input 參數便可,無需關心module中資源的定義,參數,語法等細節問題,抽出更多的時間和精力投入到架構設計和資源關係整合上。

開源Module,使其更完善,更分享,更便捷

上文中,雖然已經實現了module,可是這個module只能在本身本地機器上實現,沒法實現與他人的實時分享,沒法實現團隊內部的及時共享。

Terraform 提供了 Module 的註冊地址,將本身的module上傳到Github,並註冊爲一個Terraform Module後,便可將遠端的Module應用到咱們本身的模板中。

利用開源 module,咱們可對上文中的模板進行完善:

clipboard.png

Module 讓資源模板架構更清楚,模板管理更簡單;開源 Module 讓資源模板更便捷,更分享。除此以外,開源 Module 可實現對模板的版本控制,基於不一樣的版本,實現不一樣架構不斷升級的控制和完善。

歡迎加入 Terraform AliCloud Modules

目前咱們已經在在 Terraform Module 上發佈了一些經常使用的 Module,但這些 Module 遠遠沒法知足你們多種多樣的技術架構和複雜的應用場景,很是歡迎你們能夠將本身的模板Module註冊到官方 Module 上,藉助社區的力量,不斷完善本身模板,豐富咱們的社區。

本文做者:簫竹aron

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索