20個有效實踐提升Terraform工作流程|Part 2
在上一部分,我們一同探討了構建 Terraform 專案的一些策略,以及使用 Terraform 管理 IaC 的部分有效實踐。今天,我們將繼續深入研究將 Terraform 程式碼提升到新水平的具體要點,希望能夠為你和你的團隊提供有意義的提示和指導。
標記資源
當出現問題或試圖找出基礎設施的哪一部分導致雲費用激增時,強大且一致的標記策略將提供巨大幫助。您還可以在需要時根據標籤制定一些訪問控制策略。像定義命名規則一樣,儘量保持一致並始終相應地標記資源。
Terraform 引數標籤應宣告為最後一個引數(如果相關,僅
depends_on
或生命週期引數應在標籤之後定義)。
在進行標記時,可以定義一些適用於提供者管理的所有資源的
default_tags
。如果使用的提供程式不支援預設標籤,則需要手動將這些標籤傳遞到模組並將它們應用到資源。
引入策略即程式碼(PaC)
隨著業務團隊和基礎設施規模的擴大,對個人使用者的信任通常會降低。這時應該制定一些政策來確保我們的系統繼續執行且保持安全。制定政策即程式碼流程使我們能夠定義大規模安全和可接受的規則,並自動驗證這些規則。
實施機密管理策略
當開始使用 Terraform 時,機密管理可能不是首要任務,但最終還是要回到定義處理機密的策略。
如所有教程所說,
切勿以明文形式儲存機密並將其提交到版本控制系統中。可以透過使用
TF_VAR
設定環境變數並使用
sensitive = true
標記敏感變數來傳遞機密。
或者採用更成熟的解決方案,即設定一個機密儲存(例如 Hashicorp Vault 或 AWS Secrets Manager)來處理對機密資訊的訪問。這樣,就可以保護靜態機密並強制執行加密。還可以選擇更好的功能,例如金鑰輪換和稽核日誌。不過需要注意的是,這種方法通常會為企業帶來使用此託管服務的成本。
測試 Terraform 程式碼
與所有其他程式碼一樣,IaC 程式碼應該經過相應測試。執行
terraform plan
是驗證更改是否能快速按預期工作的最簡單方法。接下來,可以對 Terraform 程式碼執行一些靜態分析而無需應用它。單元測試也是驗證系統不同部分是否正常執行的一種選擇。
另一步驟是將
Terraform linter
整合到 CI/CD 流水線中,並嘗試捕獲與雲提供商、已棄用的語法、強制實施有效實踐等相關的任何潛在錯誤。
在正式進行以上步驟前,可以透過啟動來設定一些整合測試複製沙箱環境,在此環境中驗證一切是否按預期工作,收集結果,然後銷燬沙箱,並將其應用到生產中。
啟用除錯/故障排除
當出現問題時,我們必須快速有效地收集所有必要的資訊來解決問題。你會發現在這些情況下設定 Terraform 日誌級別以進行除錯很有幫助。
TF_LOG=DEBUG
還透過設定 TF_LOG_PATH 環境變數將日誌保留在檔案中。
儘可能構建模組
如果社群中沒有適用於你的用例的模組,可以嘗試構建自己的模組。一般會從一些基礎的東西開始構建,隨著基礎設施的成熟,你可能需要回到簡單的模組並向其新增更多功能。當在另一個環境中複製程式碼時,需要做的就是從該模組建立一個物件,並使用新環境的正確引數去進行填充。
使用迴圈和條件
你的程式碼應該能夠建立資源的多個例項,因此建議對可能從一種環境更改為另一種環境的例項使用
count
或
for_each
。這樣將能夠靈活地使用相同的程式碼來適應許多不同的用例,併為引數提供通用性。
使用函式
除了迴圈和條件之外,Terraform 函式對於在程式碼中實現通用性也至關重要。它們使您的程式碼更加動態並確保您的配置是 DRY(Don't repeat yourself)的。函式允許您執行各種操作,例如將表示式轉換為不同的資料型別、計算長度以及構建複雜變數。
充分利用動態模組
如果沒有動態模組,程式碼就無法達到 DRY 狀態。當此功能可用時,能夠實現按照您喜歡的方式構建資源的靈活性。例如,某些雲提供商沒有用於安全組規則的專用資源,並且這些規則通常嵌入在安全組本身中。利用動態模組,你只需要更改輸入即可。但如果沒有動態模組,每當新增新規則時則需要相應更改配置。
使用 Terraform WorkSpace
請使用 Terraform Workspace,這樣你將能夠在不同的環境中重複使用相同的配置。
使用生命週期模組(Lifecycle Block)
有時程式碼中可能有一些複雜的條件。比如,有一個指令碼必須在資源標籤上更改 Terraform 之外的某些內容(當然並不建議這樣做)。這時可以使用生命週期模組來忽略標籤上的更改,確保不會回滾到以前的版本。
如果有些資源,由於某種原因它看似工作正常,但你必須在不停機的情況下重新建立它,那麼生命週期模組也可以提供幫助。這時可以使用
create_before_destroy=true
來實現此目的。
使用變數驗證
Terraform 在驗證變數是否接收正確的輸入方面做得非常好,但是如果想要限制某些內容並且沒有實施 PaC 該怎麼辦?這時可以使用變數驗證。此驗證塊存在於變數內部,可以參考 Terraform 官方說明[1]瞭解更多。
靈活利用輔助工具
Terraform 是最常用和最受喜愛的 IaC 工具之一,其社群也是非常龐大且活躍的。與這個社群一起,有許多輔助工具被創造以幫助使用者更好地使用 Terraform。當然為我們的工作流程選擇和採用正確的工具並不是件簡單的事,通常需要一個實驗階段。這裡我們總結出一些有用的工具清單供大家參考:
-
tflint – Terraform linter,用於檢查計劃無法捕獲的錯誤。
-
tfenv – Terraform 版本管理器
-
checkov – Terraform 靜態分析工具
-
terratest – 幫助您對 Terraform 進行自動化測試的 Go 庫
-
pre-commit-terraform – 用於自動化的 pre-commit git hooks
-
terraform-docs – 從模組快速生成文件
-
atlantis – Terraform 專案協作工作流程
-
terraform-cost-estimation – 為您的計劃提供成本估算服務
利用 IDE 擴充套件
如果你在編寫 Terraform 程式碼時使用 Visual Studio Code 或任何其他 IDE,則可以利用其擴充套件來加快開發過程,並確保程式碼格式正確。在 vscode 上,您可以使用 Anton Kulikov 構建的 Terraform 擴充套件。請記住在本地計算機上安裝 Terraform 以確保其正常工作。
總 結
我們探索了 Terraform 和 IaC 的許多不同有效實踐,分析了處理和構建 Terraform 專案的各種選項,並瞭解了採用輔助工具如何讓我們的生活更輕鬆。當然這些並不是必須盲目遵循的秘訣,我們希望透過這篇文章,能夠成為提供指導和提示並觸發你構建自己的有效 Terraform 工作流程和專案的指南。
原文連結:
https://spacelift.io/blog/terraform-best-practices
參考連結:
1. https://developer.hashicorp.com/terraform/language/values/variables
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026925/viewspace-2985621/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 20個有效實踐提升Terraform工作流程|Part 1ORM
- 編譯實踐學習 Part2編譯
- Terraform管理雲資源實踐ORM
- 有效的微服務:10 個最佳實踐微服務
- 有效尋源的4個最佳實踐
- 設計模式 Swift 實踐 – (Part 2. 建立型模式)設計模式Swift
- Oracle 20C Concepts(Part I-2)Oracle
- Oracle 20C Concepts(Part III-2)Oracle
- Oracle 20C Concepts(Part V-2)Oracle
- 【最佳實踐】通過Terraform管理OSS資源ORM
- 《Terraform 101 從入門到實踐》 Terraform在公有云GCP上的應用ORMGC
- 《Terraform 101 從入門到實踐》 第一章 Terraform初相識ORM
- 如何有效管理技術團隊以提升工作效率
- 有效資料湖攝取的5個最佳實踐
- 20個異常處理的最佳實踐
- 《Terraform 101 從入門到實踐》 Functions函式ORMFunction函式
- 有效採購流程的7個步驟
- 三個有效的物聯網實踐,以便提前競爭
- 探索Terraform實踐:最佳化基礎設施管理ORM
- 有效提升Python程式碼效能的三個層面Python
- 編譯實踐學習 Part1編譯
- 編譯實踐學習 Part5編譯
- Azure Terraform(十三)提升 Azure Web App Plan 的效能ORMWebAPP
- 7 種移動應用使用者再召回的成功實踐:有效提升業績(上篇)
- 實踐指南-前端效能提升 270%前端
- Webshell-Part1&Part2Webshell
- WEB站點效能優化實踐(載入速度提升2s)Web優化
- Netflix 混沌工程手冊 Part 3:實踐方法
- 信安實踐2-增加zoobars個數
- 企業降低重大網路安全事故概率的10個有效實踐
- Unity 2018 照明流程最佳實踐Unity
- MobX流程分析與最佳實踐
- 工作中實用的5個Excel小技巧,提升辦公效率!Excel
- 《Terraform 101 從入門到實踐》 第五章 HCL語法ORM
- Babel 在提升前端效率的實踐Babel前端
- 20. 有效的括號
- 【譯】20個更有效地使用谷歌搜尋的技巧谷歌
- 小胖親測,分享3個實用建議,幫助你提升工作效率