這邊來介紹一下 Terraform variable 的部分, Variable 算是做 DevOps 幾次於流程的另一個重要的議題,為了就是面對系統架構客戶不斷地奇怪要求的產生,然後系統就要配合改變。
如果好一點的話系統穩定後又要 clone,甚至要更新,這時候就會很頭疼,因為有些 manual setting 的部分就忘記,所以 CI CD 的時候就會忽略掉這些資訊就會錯誤
這章節要整理的內容跟整合的概念有點多,所以拆成兩天來討論
以前對於寫程式來講,Variable 就是變數的意思。顧名思義,變數應該是常常被改變數值的暫存空間
但是另外還有一種變數就是 Constant Variable 就是所謂的常數,為什麼這邊是說所謂的常數?因為在 infrastructure 的時候,幾本上變數不太會異動(會異動的就不會寫在 Terraform 使用),但是這些資訊又很重要不能忽略不用,甚至整個cluster 都會跟著使用
另外 Terraform variable 的用法其實很簡單,放在 variables.tf 或者其他 tf file 也可以讀取得到,例如下面的範例:
使用情境就是建立一個 Cluster,然後這個 IaC 會因為我ip 不同,所以就需要設定不同的IP
variables.tf
variable "my_ip" {
description = "Say something to describe this variable"
type = string
default = "127.0.0.1"
}
variable "cluster_name" {
description = "Name of clsuter"
type = string
default = "my-cluster"
}
variable "env" {
type = string
description ="stage"
}
另外,如果有設定 default value的話,在 terraform 的 plan & deploy 階段就不需要額外指定變數的值,反而沒有設定 default value 的話,就需要在 command 那邊下,不然會跳錯誤,因為沒有設定 default value
terraform apply -var="env=dev"
目前到這邊看起來很簡單清楚,透過 variable 來存放 cluster name 跟 ip ,如果需要更改 my ip 甚至更改 cluster name的話,在這邊做更改就可以了。
但是往往事情不是想像中的這麼簡單就可以應付需求,對於一個產品可能會區分開發的環境,這邊就用 dev 代表開發的環境,另外一個就是所謂的開發環境,那這個一個小小的改變,就會影響很多的變數跟著異動,總不能一個一個 variable 更改複製吧?
因此就會產生出來 變數定義檔 .tfvars
,而這邊接下來就要來解釋這個應用跟情境,簡單來講就是先定義使用相同變數名稱,但是其 variables 的部分會更換,以下就是 switch dev and production
首先在project folder 下面就有兩個 tfvars 的檔案,然後還有一個宣告 variables 的 tf file,而 [variables.tf](http://variables.tf)
的部分跟上面的是一樣的,所以就不重複打出來
Project-folder
- variables-dev.tfvars
- variables-prod.tfvars
- variables.tf
File : variables-dev.tfvars
my_ip = "127.0.0.1"
cluster_name = "dev-clsuter"
env = "dev"
File : variables-prod.tfvars
my_ip = "123.145.167.189"
cluster_name = "prod-clsuter"
env = "prod"
以上都是對於 variables 上面的區分
接下來就是 command 的細節,利用 variable file 來切換變數之間的設定,這樣一來也不會因為某些變數沒改到,所以導致設定錯誤的狀況
terraform apply -var-file="variables-dev.tfvars"
再來這兩個都是使用變數的方法,然後切換。但是這些就是基本變數的用法而已,另外機敏的變數要怎麼處理?例如: AWS access token id ,但是總不能不使用 access token id 這樣怎麼 deploy 或者 authrization service.
但總不能要打在 .tfvars
上面吧?when you push to gitlab, then everyone know your token id include me. lol
所以這邊就是混這和用了, 假設我 terraform 上面的 my_ip 是很敏感的資料
,所以我應該這樣下
terraform apply -var-file="variables-dev.tfvars" -var="my_ip=123.145.167.189"
因為 command 上面的資訊只有執行的server 會知道,例如 gitlab ci server,但是這個台server 知道也不會怎樣,總比我知道好
以上就是一些小知識拉~
https://github.com/aws-ia/terraform-aws-eks-blueprints/tree/main/patterns/karpenter
https://godleon.github.io/blog/DevOps/terraform-input-variables/