iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

先前講完了基本上在 local 去部署 terraform 時,然後如何正確地使用 variable 的部分來部署,但是接下來身為 Ops ,怎麼可能會自己花時間在執行 deploy 的事情,肯定是要透過 CICD 的工具來輔助部署啊。

但是要如何可以整合 CICD的工具來執行 Terraform 並且可以透過 Variable 的功用,成功部署到AWS 上面,這就是今天要講的重點了~

如果Gitlab很熟悉的話,可以只看 Terraform 的部分即可

About Gitlab CI variable

通常在Gitlab CI 上面執行的時候,就是要先設定一下 variable 到 project setting 裡面,而常用Variable 就需要設定在那邊,甚至比較敏感的 Variable 也是要在那邊設置,才不需要把 Variable 寫在project script 裡面,到時候open project的時候,就跟著open 起來,即便我後面的 Commit 去覆蓋掉,但是很難確保過去的修改紀錄也跟著覆蓋掉,所以這部分就要特別小心

至於如何設置在Gitlab CI 的部分有兩個步驟要設置,首先在Gitlab project 下面找 setting → CI / CD 下點進去,之後找一個Variable 的部分,把需要加進去的變數加入

例如: 設置AWS token and Key, and, etc. RDS_HOST & RDS_PASSWORD

File : variables.tf

variable "RDS_HOST" {
	description="RDS connect host"
}
variable "RDS_PASSWORD" {
	description="RDS connect password"
}

然後在 yaml file 的部分就是把變數帶入進去,然後在透過之前提到的,要把 -var 這個帶入command 中,這樣才會透過command line 帶入比較敏感的變數

File : .gitlab-ci.yml

cvariables:
	RDS_HOST: $RDS_HOST
  RDS_PASSWORD: $RDS_PASSWORD

stages:
  - init # terraform init
  - deploy # terraform deployment
	- destroy

init:
  stage: init
script:
    - terraform init

deploy:
  stage: deploy
before_script:
	- terraform init
script:
	-> 
		terraform apply 
		-var="RDS_HOST=$RDS_HOST" 
		-var="RDS_PASSWORD=$RDS_PASSWORD" 

destroy:
	stage: destroy

before_script:
	- terraform init
script:
	-> 
		terraform destroy
		-var="RDS_HOST=$RDS_HOST" 
		-var="RDS_PASSWORD=$RDS_PASSWORD" 

How about the environment variable?

另外一種就是Terraform 如果找不到對應的變數的時候,就會去環境變數找,所以有 TF_VAR 開頭的變數名稱都會被 Terraform 抓到的環境變數,因此也可以透過這部分來設置變數帶入 Variable 裡面。

環境變數的名稱取名規則 TF_VAR_<變數名稱> ,是會被Terraform 在執行的過程中帶入的,實際做法如下:

用 Environment Variables 傳入

File : variables.tf

variable "RDS_HOST" {
	description="RDS connect host"
}
variable "RDS_PASSWORD" {
	description="RDS connect password"
}\
variable "MY_IMAGE" {
	description="Just Explain How to using environment variable to tf variable"
}

然後在透過Gitlab CI Yml configure方式把 image value 帶入到 MY_IMAGE裡面,這邊要提醒一下設置變數的時候,請記得Which need this variable? ,不然變數亂設會沒帶進去到後面的部屬

File : .gitlab-ci.yml

variables:
	RDS_HOST: $RDS_HOST
  RDS_PASSWORD: $RDS_PASSWORD
	TF_VAR_MY_IMAGE: python/pytorch # Here Here Here Here 

stages:
  - init # terraform init
  - deploy # terraform deployment
	- destroy

init:
  stage: init
script:
    - terraform init

deploy:
  stage: deploy
before_script:
	- terraform init
script:
	-> 
		terraform apply 
		-var="RDS_HOST=$RDS_HOST" 
		-var="RDS_PASSWORD=$RDS_PASSWORD" 

destroy:
	stage: destroy

before_script:
	- terraform init
script:
	-> 
		terraform destroy
		-var="RDS_HOST=$RDS_HOST" 
		-var="RDS_PASSWORD=$RDS_PASSWORD" 

然後上面的作法 Terraform apply 的時候就會預設載入TF_VAR 裡面設定的參數到 MY_IMAGE

以上大概這樣,如果後面有想到甚麼再來補充


Reference

https://godleon.github.io/blog/DevOps/terraform-input-variables/


上一篇
{Day 11: Terraform variable tips- part 1}
下一篇
{Day 13: Deploy AWS Security Group through Terraform}
系列文
Don't be a Machine Learning Engineer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言