DevOps課程-IaC with Terraform 16
在前面撰寫Terraform Code完成了EC2機台的建置
但是其中程式碼相當繁雜
若是要加複雜的設計架構,可想而知這份Code就會更長更難以閱讀
也無法提供overview
所以延伸出了 — Modules
Modules:
- 將許多不同的resources包在一起
- 組織並打包各種設定成目錄方便分類區分邏輯Components
- 方便重複利用
舉例來說做製作EC2 instance的時候,可能就封裝以下resources成為Module:
- aws_instance
- aws_key_pair
- aws_ami
- aws_security_group
之類的合成為一個Module,並且可能命名為Webserver_Module
然後這整個Webserver_Module就可以用在不同region
使用上大概如下圖:
就像一般程式的Function一樣,依據傳入的參數得到不同回傳值
最終也會讓程式看起來比較整潔
另外也可舉例將以下resources合併為一個Module
- aws_vpc
- aws_subnet
- aws_internet_gateway
- aws_route_table
以上這些常常需要再一起設定的項目
因為其實我們也可以自定義Module
也可以用Terraform或是其他公司組件好的現成Module:
查找的頁面就在:
比如點進上圖的vpc module
其中特別要注意的是Dependency的部分:
也就如果我有定義引用這個VPC的Module並執行init後
裡面將自動包含aws provider
(此時main.tf裡面就不再需要定義aws provider)
我查到可以查看我當初執行init時候引入的provider的版本:
#執行以下指令可以查看到provider的版本:
terraform version
此時再看看其他的Module,如下EKS的:
放大來看:
後面課程將會嘗試:
- 自建Modules
- 使用官網上Registry提供的Modules