Skip to main content

4 posts tagged with "Terraform"

View All Tags

· 5 min read

標題: 「新手閱讀,我踩過的 Terraform 各種雷」 類別: terraform 連結: https://medium.com/contino-engineering/10-things-i-wish-i-knew-before-learning-terraform-f13637a01aa6

本篇文章作者分享自己學習與使用 Terraform 多年來遇過的各種雷,也希望藉由這類型的文章可以讓每個踏入 Terraform 的人都不要走冤枉路

  1. Make sure you have a terraform block in your configuration TF 檔案中可以透過 Terraform 區塊來描述關於 Terraform 本身的一些限制,譬如版本條件,相關的 provider 來源以及版本。 這個區塊非常重要但是本身是一個 optional 選項,所以不寫其實不影響整體功能,但是沒有去限制使用的版本範圍其實就跟任何的軟體環境一樣非常危險, 很容易踩到「昨天還可以,今天就不行的」通靈現象,所以作者希望每個人都好好的將 Terraform 區塊描述清楚,確定當前支援的版本是哪個確保該 TF 能夠用正確的版本於任何環境執行

  2. Statefile 實際上本身是純文字格式,作者想要提醒的是 State 檔案作為 Terraform 同步上最重要的檔案,其本身是一個純文字明碼的格式,這意味你運行過程中的任何帳號密碼其實都是純文字的格式存放於該檔案中。 所以 State 檔案的保存非常重要,需要用很嚴肅的資安態度來保護這個檔案,否則該檔案被人取得則你 TF 中的各種資訊都會被對方取得。 作者直接於文章中展示一個範例,該範例會創建一個 AWS aws_secretsmanager_secret_version,而該物件的 secret_id, secret_string 都會以明碼的方式被存放於 State 檔案中。

  3. Have verbose variables and outputs blocks TF 中的所有變數都可以用非常簡易的方式去宣告,但是如果妥善地利用這些內建的功能將可以使得變數的使用變得更加方便,特別是當該變數要跨 Module 使用時,呼叫者可以透過更輕易的方式 去理解該變數的格式與用法。 其中最為重要的則是 validation 的內容,作者以 AWS image_id 為範例,該變數基本上就是一個字串,所以使用者可以傳遞任何變數到該欄位去使用,但是如果搭配 validation,就可以讓 TF Apply 提早 先觀察到這些變數是否合法,能夠降低與避免不必要的失敗。 所以針對每個變數都好好的撰寫相關敘述與驗證,能夠讓團隊使用上減少無謂的猜想與溝通。

  4. Integrate your environment with a pipeline early Terraform 的入門非常容易,但是當你想要將 Terraform 導入到團隊中並且與其他人共同合作時,整個使用上的複雜度會大幅度增加。 作者認為如果真的要導入 Terraform 到整個團隊中,則要盡快且盡可能地將 Terraform 導入到現有的 pipeline 架構中,譬如 Terraform Cloud 服務 能夠幫你妥善的管理這些 Lock/State 並且透過 Terraform Apply 來執行變化。

作者還有第二篇探討剩下的用法,包含 Keep your code together as much as possible Have clear lines of demarcation on responsibility Use multiple environment files for the same code Familiarise yourself with HCL’s functions and meta-arguments Terraform is not a golden bullet

有興趣的讀者建議兩篇文章都閱讀一下

· 3 min read

標題: 「Terraform 生態下的五個相關輔助工具」 類別: terraform 連結: https://betterprogramming.pub/5-essential-terraform-tools-to-use-everyday-e910a96e70d9https://medium.com/geekculture/my-jq-cheatsheet-34054df5b650

隨者 IaC 的概念落地開花,愈來愈多團隊嘗試使用 Terraform 來管理各式各樣的 infrastructure,作者本篇文章分享五個自己每天使用的 Terraform 輔佐工具,分別是

  1. TFSwitch
  2. TFLint
  3. Terraform-docs
  4. Checkov
  5. Infracost

TFSwitch: 如果環境中目前因為歷史因素沒有辦法統一轉移到相同版本的 Terraform 使得你必須要用不同版本的 Terraform 來處理不同的專案的話,可以透過 TFSwitch 來幫助你快速地切換版本

TFLint: 就如同大部分的 Lint 工具一樣, TFLint 針對 Terraform 的工具,特別是跟特定 CloudProvider 整時候會有更多的錯誤偵錯,將該工具整合到 CI/CD pipeline 中更可以幫助團隊避免合併一個有問題的 Terraform code.

Terraform-docs: 這是一套能夠將你的 Terraform module 直接產生對應 Markdown 格式文件的工具,如果本身有撰寫 Terraform Module 的團隊都可以使用這工具試試看,看看產生的文件是否可以滿足基本需求

Checkov: 這是一套支援 Terraform 的靜態程式碼掃描工具,可以用來檢查是否有可能的安全性漏洞與不良好的設定,目前預設大概有 750+ 以上的預設規則,

Infracost: 這工具會的目的就如同專案名稱一樣,根據創造的雲端資源幫你估計這些資源的實際花費,對於要控管成本的團隊來說,可以提供一個粗略的金額概念,畢竟如網路流量等相關付費還是要實際上線才知道,但是可以快速地針對不同的 infra 直接列出大概的金額差異,搭配得宜對於整體工作流程還是有幫助的。

· 3 min read

標題: 「透過 Helm 與 Terraform 來自動 Re-new Cloudflare origin CA」 類別: usecase 連結: https://awstip.com/auto-renew-cloudflare-origin-ca-with-terraform-and-helm-d28be3f5d8fa?source=linkShare-91a396987951-1645539866&gi=a18b2bbd9604

本篇文章是過工具介紹文,探討如何基於 Helm 與 Terraform 這兩個不同層級的工具來處理 Cloudflare 的憑證。

Why Cloudflare

根據 W3Techs 的調查顯示, 81.2% 的網站都使用 Cloudflare 來提升讀取速度或安全防護。 透過 CDN 的概念與機制,網站可以讓全球使用者有更快的讀取速度,此外也愈來愈多的網站會透過 Cloudflare 來處理如機器人, DDOS 之類的流量攻擊,畢竟要自己架設網站處理這些攻擊非常困難 因此讓 Cloudflare 這類型的網站來幫忙過濾與處理能夠讓團隊更專注於本身的業務開發與維運

Kubernetes

想要在 Kubernetes 內妥善管理所有使用的憑證其實也是一個麻煩事情,除了要能夠設置正確來創立憑證外,能夠於到期前自動 re-new 也是一個不可或區的功能。 Kubernetes 內跟憑證有關的最知名專案我想就是 Cert-Manager,而 Cloudflare 也基於此專案撰寫了相關的 Kubernetes Controller,如 Origin CA 等 因此本文使用的功能與示範都會基於 cert-manager 與 Cloudflare 的架構。

目的

本文的目的是希望能夠將過往手動的繁瑣步驟給自動化,讓 Kubernetes 可以獲得 Cloudflare 提供的好處,如憑證與相關域名等。 內文是基於 Terraform 作為出發點,然後透過 Kubernetes Provider 的方式來與之互動,一步一步的安裝各種資源最後成功於叢集內獲得相關域名的 SSL 憑證以及其他資源

· One min read

連結: https://medium.com/hashicorp-engineering/creating-module-dependencies-in-terraform-0-13-4322702dac4a

Terraform 這個工具想必大家都玩過也聽過,這邊非常推薦大家升級到 0.13 版本,這個版本中解決了關於 Module 之間依賴性的問題,能夠使用原先就有的 depends_on 的語法來直接描述,而不需要按照過往以前用> 各種 fake resource 等機制來完成,整個 Terraform 程式碼會更佳清晰與簡單!