DevOps課程-IaC with Terraform 14

Automate Provisioning EC2 with Terraform — Part3(單一main檔建出EC2機台)

ZONGRU Li
Feb 22, 2022

如同前篇最終完成了EC2 instance與背後各種infrastructure建置

接著要考慮到一些基礎環境建置的場景

例如順帶建置簡單的docker環境,甚至運行一個Nginx的容器

可以在aws_instanceresource區塊內加入安裝docker的相關指令:

主要增加以下語法:

記得上面這段script只有在instance初始化的時候會跑一遍

之後再也不會執行!

所以這邊就簡化,不用帶剛剛增加的Tag:

執行plan驗證最後面看到:

看到EC2 instance會重建

看起來沒問題,就執行apply指令,過程看到:

實際上還在做機台初始化:

等到正常後:

嘗試執行連線測試(這邊嘗試用VScodeterminalssh連線):

並且nginx的網頁也應該可以進去(使用8080 PORT):

最終,當初定義的幾項infrastructure項目就都完成了:

  1. VPC(額外建立,而不使用到Default給的VPC環境)
  2. 在上述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的組合來完成專案需求!

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet