DevOps課程-IaC with Terraform 18

Modules in Terraform — Part3(完成EC2的Terraform專案模組化)

ZONGRU Li
Mar 7, 2022

Create "webserver" Module

當前的跟目錄的main.tf內尚有以下的resource定義:

簡單統整根目錄main.tf內尚有的resources:

aws_vpc,myapp-subnet,aws_default_security_group,aws_key_pair

,aws_instance,以及data的aws_ami

此時將上述中以下的幾個resources轉移到webserver/main.tf內:

aws_default_security_group,aws_key_pair

,aws_instance,以及data的aws_ami

並且改寫以上Code,部分值改為變數宣告:

其中注意到上面使用到的entry-script.sh

要沿用到這段Code而不修改目錄階層的條件下,需要做以下變動:

接著將上面webserver module內宣告的變數統整為webserver內的變數檔:

接著回到根目錄的main.tf宣告module並注入上述參數:

卡在image_name

接著寫到default_sg_id

其實這個並不需要給,因為:

所以webserver module內的變數也不用了:

最後成品如下:

而剛剛新增的image_name還要另外給予:

理論上目前即完成了

所以嘗試執行plan指令:

出現module尚未執行init的錯誤提示

所以補做init:

接著再做一次plan指令:

錯誤的原因是根目錄下的outputs.tf內容:

比如僅保留要印出ec2_public_ip則要從module取出

所以module要先outputs

接著根目錄的outputs才能從module內拿到:

而看到剛剛前面圖中的以下這個錯誤:

看起來該sh檔不能放到module的目錄內,所以再次移回到原來位置

然後儲存後再次執行plan指令:

看到滿正常的結果!

接著就是執行apply:

如上看到正常結果

講師則有遇到錯誤,並會有以下log出現

並且建議將上述crash.log也加入ignore檔內:

然後看到:

並且:

而且ssh也可以連線到該機台:

裡面也確實有docker:

至此也就完成了一個完整的EC2的Terraform專案

並且有完成模組化

集中變數給予:

不管事哪一個模組有用到上述參變數,都只要修改同一處

接著將當前的專案全部commitgit上儲存!

可以先看看status:

add並commit內容:

推上Git:

然後就可以執行destroy指令了:

...

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet