用 Terraform 部署 Gitlab on GCP(一) — init

Bryan Yang
A multi hyphen life
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 了!

--

--

Bryan Yang
A multi hyphen life

Data Engineer, Data Producer Manager, Data Solution Architect