用 Terraform 部署 Gitlab on GCP(一) — init
Published in
2 min readMay 7, 2018
萬事起頭難
大家應該都知道 Terraform 可以用來部署雲端資源.成功部署後 Terraform會將系統檔案記錄在 terraform.tfstate 這個檔案裡.這個檔案如果壞了,terraform 就沒辦法順利正常 apply 或 destroy 資源.為了避免這種事情發生,terraform 可以透過設定 backend ,直接將這個檔案放在 gcs 中.但問題是 backend 的參數不允許引用其他 terraform 資源 — 也就是無法在 terraform 內進行參數化.因此一開始只好透過 shell script 來建立這個檔案.
當專案開好後,第一件事就是要先建立 Bucket 好放 Terraform 的檔案,透過以下 shell script 可以建立 backend.
backend 吃三個參數:
- bucket:bucket 的名字
- path:放在那個目錄下
- project:放在哪個 project 裡
所以透過讓使用者從外部傳 project、region、bucket name 進去,並且用 basename 讀取當前目錄名稱作為 path.
#!/bin/bash
PROJECT=$1
REGION=$2
BUCKET=$3
BASENAME=`pwd | xargs basename`
set -x
gsutil mb -p ${PROJECT} -l ${REGION} gs://${BUCKET}
cat > backend.tf <<EOF
terraform {
backend "gcs" {
bucket = "${BUCKET}"
path = "${BASENAME}"
project = "${PROJECT}"
}
}
EOF
因為 terraform.tfstate 這個檔案十分重要,所以最後需要另外開啟版本控制來保護這個檔案.
gsutil versioning set on gs://${BUCKET}
剩下的就盡量靠 terraform 了!