本篇翻譯與講解 terraform 官方 blog 對於 test terraform 的建議
課程內容與代碼會放在 Github 上: https://github.com/chechiachang/terraform-30-days
賽後文章會整理放到個人的部落格上 http://chechia.net/
測試是程式碼開發的一環,對於程式碼的品質影響巨大,這裡不提測試的概念。總之,測試非常重要。
以 terraform 而言,有許多時候都會需要測試
那應該如何測試 terraform?
將團隊選擇測試策略,依照成本(時間成本與費用)排序,會是個階層金字塔
基於這個基礎想法,分別討論如何測試 terraform
terraform fmt -check
terraform validate
實作有幾個選項
檢查 module 的 input 與 input format
terraform 在 variable 中提供 custom validation rule 的功能
variable "listener_rule_priority" {
type = number
default = 1
description = "Priority of listener rule between 1 to 50000"
validation {
condition = var.listener_rule_priority > 0 && var.listener_rule_priority < 50000
error_message = "The priority of listener_rule must be between 1 to 50000."
}
}
contract test 可以延伸,所有在 terraform apply 之前,針對 content / format / input / output 的檢查都可以
整合測試針對 terraform apply 的結果做測試,也就是 terraform module 是否正確的產出 infrastructure
使用 terraform test framework
當 terraform apply 後,產生的 infrastructure,使用者是否能正常使用
這個層級的測試需要導入使用者的測試例,會需要 QA 團隊協助
如何對 terraform 做 end-to-end test
End-to-End 通常會花費需多時間,但對於整體環境是非常必要的
要如何手動測試 terraform?
如果是 app,我們會手動測試其功能
回到 infrastructure,如何手動測試 infrastructure 的功能?
因此對 terraform 而言,針對嵾數做 variable validation 是十分有效的
筆者建議,做少少的努力就可以獲得明顯成效的方法
app 產品穩定的話,應該有 end-to-end test,善用 QA 團隊既有的 end-to-end test
完成以上內容,已經滿足一個『能夠正常乘載 app 的 infra 的需求了』。當然,實務上只是滿足需求不是終點,還有非常多可以調整優化的地方
為 terraform 額外寫 integration test,可以進一步提升 module 品質,降低成本與提升效能
感謝有這篇,我最近才在思考未來該怎麼幫 Terraform 寫測試。
terraform 測試有蠻多地方值得思考的,想要深入的話可以看 terratest 這個專案