DevOps課程-IaC with Terraform 14
如同前篇最終完成了EC2 instance與背後各種infrastructure建置
接著要考慮到一些基礎環境建置的場景
例如順帶建置簡單的docker環境,甚至運行一個Nginx的容器
可以在aws_instance的resource區塊內加入安裝docker的相關指令:
主要增加以下語法:
記得上面這段script只有在instance初始化的時候會跑一遍
之後再也不會執行!
所以這邊就簡化,不用帶剛剛增加的Tag:
執行plan驗證最後面看到:
看起來沒問題,就執行apply指令,過程看到:
實際上還在做機台初始化:
等到正常後:
嘗試執行連線測試(這邊嘗試用VScode的terminal的ssh連線):
並且nginx的網頁也應該可以進去(使用8080 PORT):
最終,當初定義的幾項infrastructure項目就都完成了:
- VPC(額外建立,而不使用到Default給的VPC環境)
- 在上述VPC內建立Subnet
(雖然可以在多個availability zone內建N個Subnet,但是這邊就建一個就好)
3. Route table & Internet Gateway(為了讓外面可以連進去nginx)
4. provision EC2 instance
5. 然後佈署nginx的Docker container
6. 建立Security Group(firewall)
以上皆完成建置!
Extract to shell script:
如果上面建立docker與nginx容器的script內容較長
則可以另外提供sh檔案來調用,直接在專案目錄內建立entry-script.sh檔案:
剛剛的EOF段落改為:
並在entry-script.sh內容將script貼進去(這時候可以省略EOF)
儲存後執行plan指令:
中間很長
執行apply後:
一樣能進到nginx網頁:
此時的Code內容:
main.tf:
terraform.tfvars:
Commit to own feature branch
在專案目錄下打開git bash:
#執行指令切換成feature分支:
git checkout -b feature/deploy-to-ec2-default-components
#執行以下git指令:
git add .git commit -m "add ec2 deployment configuration"git push --set-upstream origin feature/deploy-to-ec2-default-components
Configuring Infrastructure, not Server!
考量到已存在的機台,不是Terraform建置的
想要額外做一些如上的script的設置,就不太可能做到了!
因為一般Infrastructure建置大致分四個階段,Terraform僅能完成三個:
但是取而代之的是有其他工具可以協助:
也就是Ansible,puppet,CHEF這類(Configuration Management Tool)
可以用來:
- 1.deploy App
- 2.configuring server
- 3.installing/update packages
- 4…etc
一般情況下,普遍就會是用Terraform + Ansible的組合來完成專案需求!