1、什麼是Modulegit
Module 是 Terraform 爲了管理單元化資源而設計的,是子節點,子資源,子架構模板的整合和抽象。在實際複雜的技術架構中,涉及到的資源多種多樣,資源與資源之間的關係錯綜複雜,資源模版的編寫,擴展,維護等多個問題的成本都會不斷增長。將多種能夠複用的資源定義爲一個module,經過對 module 的管理簡化模板的架構,下降模板管理的複雜度,這就是module的做用。github
除此以外,對開發者和用戶而言,只需關心 module 的 input 參數便可,無需關心module中資源的定義,參數,語法等細節問題,抽出更多的時間和精力投入到架構設計和資源關係整合上。架構
官方建議Module標準結構包含:main.tf,variables.tf,outputs.tf,README.md。這些是最小模塊的建議文件名,即便它們爲空。ide
一、main.tf:資源的定義模板
二、variables.tf:模板所依賴的參數定義和參數值
三、outputs.tf:資源的輸出值
四、README.md:模板的簡單介紹和使用說明以及該模塊可用的許可證架構設計
對於一個簡單的模塊,main.tf 是主要入口點。包含了建立資源的主要內容。對於複雜的模塊,能夠將資源建立分爲多個文件,可是任何嵌套的模塊調用都應位於主文件中。variables.tf 而且outputs.tf應分別包含變量和輸出的聲明。設計
# 簡單的模塊 $ basic-module/ . ├── README.md ├── main.tf ├── variables.tf ├── outputs.tf # 複雜的模塊 $ complete-module/ . ├── README.md ├── main.tf ├── variables.tf ├── outputs.tf ├── ... ├── modules/ │ ├── nestedA/ │ │ ├── README.md │ │ ├── variables.tf │ │ ├── main.tf │ │ ├── outputs.tf │ ├── nestedB/ │ ├── .../ ├── examples/ │ ├── exampleA/ │ │ ├── main.tf │ ├── exampleB/ │ ├── .../
3.一、調用子Module版本控制
module "my_vpc" { source = "./module/vpc" # ... }
3.二、訪問Module的輸出值code
output "vpc_id" { value = "${module.my_vpc.vpc_id}" # ... }
3.三、Module 的版本orm
module "vpc" { source = "terraform-aws-modules/vpc/aws" version = "0.0.1" }
該version屬性值能夠是單個顯式版本,也能夠是版本約束表達式。約束表達式使用如下語法來指定可接受的版本範圍:blog
上文中,雖然已經實現了module,可是這個module只能在本身本地機器上實現,沒法實現與他人的實時分享,沒法實現團隊內部的及時共享。
Terraform 提供了 Module 的註冊地址(https://registry.terraform.io/),將本身的module上傳到Github,並註冊爲一個Terraform Module後,便可將遠端的Module應用到咱們本身的模板中。
Module 讓資源模板架構更清楚,模板管理更簡單;開源 Module 讓資源模板更便捷,更分享。除此以外,開源 Module 可實現對模板的版本控制,基於不一樣的版本,實現不一樣架構不斷升級的控制和完善。
咱們能夠在網址:https://registry.terraform.io/browse/modules 找到咱們所使用的雲服務商的各類terraform module。
# AWS Modules https://github.com/terraform-aws-modules # Alicloud Modules https://github.com/terraform-alicloud-modules
若是您喜歡這篇文章,請考慮關注我。
長沙DevOps聯盟 - 關注容器技術,K8S,自動化部署,基礎設施架構。