因為在 AWS 上 Multiple Account 的管理不容易,每到稽核又是一大難關,每次要抱佛腳的時候就會開始出現被現實狀況催生的東西。
Terraform + CloudFormation 是在 AWS 上實現 infrastructure as a code 很好用的工具,前者相容各大平台,後者是 AWS 原生服務。
在實際的應用面上,單用其中一項都會有種綁手綁腳的感覺
- Terraform 好讀、可拆解的設定檔,缺點是支援新功能的速度不夠快、處理某些 resource 不夠彈性。
- CloudFormation 原生 AWS,新功能幾乎立馬支援,對於 AWS 的服務幾乎沒什麼問題,缺點是不易讀。
這兩個工具各有優缺點,但是卻是互補關係,所以開始採用 Terraform + CloudFormation 的方式來佈署,用這樣的方式比較考驗技術力 (你兩者都要會),對於招募或教育訓練會比較難 …
Terraform + CloudFormation 主軸會以 Terraform 為核心,透過 Terraform 支援的 cloudformation resource aws_cloudformation_stack 來建立 cloudformation stack,所以你可以直接把 cloudformation 的 yaml 餵給 Terraform。
但是在編寫 Terraform + CloudFormation 的時候有幾個重點要特別注意,盡量做好每一項:
- Terraform 盡量不寫死參數,用 tfvars 的方式去餵參數。
- CloudFormation 把 id、value 能拋的都 Output 出來,讓 Terraform 可以去抓取 CloudFormation output 的值,例如 subnet CIDR、security group id。
- 版控 + CI / CD
- 做好 Test case (awspec、kitchen)
這樣的作法 Terraform 可以讓你容易跨平台管理、CloudFormation 給你 AWS 的彈性,之後如果 GCP 發展起來要轉換也比較容易!