DevOps課程-IaC with Terraform 17

Modules in Terraform — Part2

ZONGRU Li
Feb 23, 2022

Modularize our Project

首先先還原到沒有使用常常有問題的provisionerCode如下:

main.tf:

terraform.tfvars:

可以看到當前的main.tf單一檔案內定義了許多的resources

首先先將git branch做個切換:

#執行切換branch:
git checkout -b feature/modules

並且一般普遍的Terraform專案架構上,會將上述main.tf內的Code大致分為:

  • main.tf(主要放resources的部分)
  • variable.tf(放變數宣告)
  • outputs.tf(放output)
  • providers.tf(宣告providers)

所以依據上述定義,開始在專案內額外擴增這幾個檔案:

因為provider只有單一個aws不另外額外擴檔存放,只先做

outputs.tf:

variable.tf:

此時maim.tf剩下:

建立Module:

先在專案目錄內建立一個目錄叫 →modules

緊接著在這個目錄下再建出我們自訂義的module目錄 →webserver

然後在modules目錄下定義另一個module目錄叫 →subnet

Module目錄的劃分主要是將類似的resources做歸類

通常一個Module會包含三或四個resources

然後透過VScodeterminal的功能

分別在這兩個目錄(webserver 與 subnet)內分別定義:

  • main.tf
  • outputs.tf
  • variables.tf

首先先開個Git Bash(才能用一個bash指令操作,預設PowerShell有點難用...)

完成webserver目錄的部分:

完成subnet目錄的部分:

再來將目前main.tf內跟網路有關的三個resources

歸類到subnet module內(放到subnet module內的main.tf)

aws_subnet

aws_internet_gateway

aws_default_route_table

但是需要額外修改以下幾處:

上面額外定義的兩個變數:

  • var.vpc_id
  • var.default_route_table_id

就要額外宣告到subnet module內的變數檔去:

另外原本有用到的變數宣告也要轉移過來:

接著再把剛剛額外定義的變數加上去:

所以此時subnet modules內的main.tf內使用到的變數

在該modules的變數檔都有宣告

Use the Module

主要的main.tf內要使用到上面定義的subnet module

則要宣告這個module:

為了方便,再把subnet_cidr_block變數加回去:

所以在改回:

意思就是

1.在主層的.tfvars檔內的變數值:

2.設定給到主層的變數檔(variables.tf):

3.主層變數檔變成主層main.tf引用child modulargs

4.上述的args值變成該module的變數檔的值

5.最終提供給這個module內的main.tf使用:

然後上面弄老半天少傳入一個:

另外主層main.tf引用child module還要特別改一樣地方是相對路徑:

接著還要關心主層main.tf中,原本取用轉移到module內的resource

如下解說

Module Output:

所以主層main.tf取用module內的resource正確方式為何?

其實就是定義在module內的outputs.tf裡面

例如如上原本主層的main.tf要拿到:

這邊要先到該module內的outputs.tf定義:

主層main.tfCode則改成:

Apply Configuration Changes:

在執行之前,因為有做Modularize(或說只要有變動到module的時候)

所以首先要先重做init

上面看起來沒問題,就執行plan指令:

前面課程最後有把東西都做destroy了,所以這邊變成全部重建

上面看起來也沒問題,就可以apply:

terraform apply --auto-approve

然後在AWS看到:

並且:

然後這邊當前的Code分太多檔案,就不用gist記錄了

就將目前的Code推上github並執行destroy

推到feature/modules這個branch
terraform destroy

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet