DevOps課程-IaC with Terraform 18
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並注入上述參數:
接著寫到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專案
並且有完成模組化
集中變數給予:
不管事哪一個模組有用到上述參變數,都只要修改同一處
接著將當前的專案全部commit到git上儲存!
可以先看看status:
add並commit內容:
推上Git:
然後就可以執行destroy指令了:
...