Terraform 最佳實踐

      網友投稿 1052 2025-04-04

      一 最佳實踐

      Plan before Apply/Stage before Prod

      在正式應用資源清單錢,先plan,為保障線上安全,需要現在dev/stage環境測試,再上prod

      環境隔離(global/stage/prod/mgmt)

      單個環境進行隔離

      每個目錄單獨.tfstate

      每個目錄單獨.tfstate 狀態管理,避免項目沖突與混亂

      目錄間使用terraofrm_remote_state共享狀態

      功能組件分離(web/db…)

      使用模塊modules

      Version Constraints

      variable中添加validation rules

      使用帶模版的模塊(git ref)

      將模塊代碼放到單獨Repo

      Remote state存儲使用加密,并啟用版本(S3 Versioning)

      TF模版中避免硬編碼(eg:使用date獲取vpc_id/account_id/region)

      Tag(跟蹤成本/區分手動創建)

      使用terrascan掃描隱患。

      module編寫完成后,

      利用terraform fmt格式化內容

      利用terratest進行測試

      二 編寫module規范

      Module 倉庫建立完畢后,首先要 fork 倉庫并將其clone到本地。接下來,開始 Mudole 的編寫工作。官方已經給出了一個標準的 Module 應該遵循的原則和規范,詳見 standard-module-structure . 本文將在此基礎上進行補充。

      基本原則 每個Module不宜包含過多的資源,要盡可能只包含同一產品的相關資源,這樣帶來的好處是Module的復雜度不高,便于維護和閱讀; 對于統一產品的不同資源,應該分別放在不同的子module中,然后在最外層的main.tf中組織所有的子資源,比如 module slb 中定義了兩個資源 slb instance 和 slb attachment,這兩個子資源分別定義在了 modules/slb 和 modules/slb_attachment 中,然后在最外層的 main.tf中將這兩個module組合為一個新的module 每個module要盡可能單元化,以便可以在實際使用過程中自由添加和刪除而不影響其他resource。即一個module盡可能敘述1-2件事情,如創建一個slb實例,并將一組ecs的掛載到這個slb下(slb的作用就是實現對ecs的負載均衡),至于slb的listener配置,應該放置在一個獨立的mudule中,一方面listeners比較復雜,涉及四種協議,另一方面,對于同一協議的listener,除了監聽端口外,大部分的配置都是相同的,而這些相同的配置可以通過一個單獨的module被復用在不同其他資源模板中; 模板編寫過程中,需要使用到大量的TF語法,詳見configuration syntax 和 interpolation syntax。

      main.tf 每個 Module 都必須包含一個 main.tf 用于存放 resource 和 datasource。resource和datasource的參數禁止使用硬編碼,必須通過變量進行引用; 為了標準起見,每個 resource 和 data source 的命名均以一些關鍵字或者關鍵字前綴為主,如this,default,盡量避免使用foo,test等 為了更好的了解Module被他人引用的次數,阿里云Provider支持對每個Module進行打標,即在main.tf的provider中聲明字段configuration_source,格式如下: provider “alicloud” { … configuration_source = “terraform-alicloud-modules/demo” // This should be replaced by the specified owner and module name }

      variables.tf 每個變量都要添加該參數對應的描述信息,這個信息最終是要呈現在terraform registry官網上的; 對于一些非關系型的參數,可設置一個默認值,如name,description等 對于復雜類型的變量,要顯示聲明其類型,如list,map 子資源的變量要在Readme中以列表的形式予以呈現

      outputs.tf module中output的作用是被其他模板和module引用,因此,每個module要講一些重要的信息輸出出來,如資源ID,資源name 等; 重復資源的變量要以列表的形式予以輸出,如module ecs-instance中,創建多個instance資源,這些資源的ID應該輸出到一個list變量instance_ids中 和variables一樣,子資源的output變量也要在Readme中以列表的形式予以呈現

      README 描述下當前Module是用來干什么的,涉及哪些resource和data source 增加 Usage,指明該如何使用這個 Module。Module 的source 格式為 source = “//alicloud”,如:source = “terraform-alicloud-modules/slb-listener/alicloud” 添加module暴露的入參和出參,幫助開發者更好的使用Module 具體細節可參考其他module

      執行可開啟日志

      export TF_LOG=TRACE export TF_LOG_PATH=./terraform.log

      執行完畢后,可查看 Terraform 本地文件夾會生成一個 terraform.log 的文件。文件記錄了 provider 定義的日志輸出。

      三 實戰

      3.1 使用stats文件作為查詢源

      在實際應用場景中,可能module A 需要依賴已經運行完成后的module B 的outputs,例如實例綁定安全組,需要先運行安全組module將結果存儲在state文件中,module A以module B的運行結果state文件作為數據輸入源進行查詢操作。

      例如使用cos作為backend后端存儲。

      provider "tencentcloud" { region = "ap-beijing" } terraform { required_providers { tencentcloud = { source = "registry.terraform.io/tencentcloudstack/tencentcloud" version = ">=1.61.5" } } backend "cos" { region = "ap-beijing" bucket = "xxxx-xxxxxx" prefix = "terraform/state" } }

      使用cos中的state文件作為terraform_remote_state。

      Terraform 最佳實踐

      data "terraform_remote_state" "cam" { backend = "cos" config = { region = "ap-beijing" bucket = "xxxxxx-xxxxxx" prefix = "terraform/state" } } locals { standards = data.terraform_remote_state.cam.outputs } output "result" { value = { items = { for k, v in local.standards :k=>v} } }

      彈性云服務器 ECS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:word表格怎么插入
      下一篇:有關職稱計算機excel技巧
      相關文章
      综合亚洲伊人午夜网| 亚洲乱码国产乱码精华| 国产亚洲福利精品一区二区| 亚洲大成色www永久网址| 亚洲免费在线视频播放| 亚洲精品国产福利在线观看| 亚洲四虎永久在线播放| 亚洲国产一区二区a毛片| 亚洲视频一区调教| 久久久久亚洲AV片无码下载蜜桃| 亚洲人成在线播放网站岛国| 亚洲欧洲日韩不卡| 亚洲成人免费网址| 久久精品国产99国产精品亚洲| 国产日本亚洲一区二区三区 | 亚洲依依成人精品| 亚洲ts人妖网站| 日韩亚洲国产综合高清| 亚洲乱码日产精品一二三| 天天综合亚洲色在线精品| 亚洲国产综合久久天堂| 国产亚洲美日韩AV中文字幕无码成人 | 久久亚洲高清观看| 亚洲产国偷V产偷V自拍色戒| 久久91亚洲精品中文字幕| 精品日韩亚洲AV无码| 亚洲六月丁香六月婷婷色伊人| 亚洲精品一二三区| 亚洲av色香蕉一区二区三区| 亚洲第一区精品观看| 国产亚洲欧洲Aⅴ综合一区| 久久夜色精品国产嚕嚕亚洲av| 91亚洲国产在人线播放午夜| 亚洲三级视频在线| 亚洲国产精品自在自线观看| 亚洲电影日韩精品| 亚洲国产精品乱码一区二区 | 五月婷婷亚洲综合| 国产亚洲大尺度无码无码专线| 亚洲va在线va天堂va不卡下载| 色播亚洲视频在线观看|