Terraform,模塊基礎

1、什麼是Modulegit

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

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

2、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

3.一、調用子Module
Terraform,模塊基礎版本控制

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

  • >= 1.2.0:版本1.2.0或更高版本
  • <= 1.2.0:1.2.0或更舊的版本
  • ~> 1.2.0:任何非beta版本>= 1.2.0和< 1.3.0,例如1.2.X
  • ~> 1.2:任何非beta版本>= 1.2.0和< 2.0.0,例如1.X.Y
  • >= 1.0.0, <= 2.0.0:介於1.0.0和2.0.0之間的任何版本

4、開源Module

上文中,雖然已經實現了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,自動化部署,基礎設施架構。
Terraform,模塊基礎

相關文章
相關標籤/搜索