一般來說我們要在 GCP 上開啟一台 VM ,我們會怎麼做呢?
一種方法是我們會到到 GCP 的 Console 上面選取 create an instance ,像是下面的圖
或者是我們會選擇使用 gcloud 的 CLI 來處理舉例如下
gcloud compute instances create testvm \
--image-family=debian-10 \
--image-project=debian-cloud \
--machine-type=e2-micro
因此我們可以說用 gcloud 搭配 ansible 可以做些自動化的 configuration management 但是問題來了,我們如何知道 GCP 上面我們有哪些 resource ,以及我們已經建立了什麼 resource 還有什麼 resource 我們還沒有建立。這個『狀態』我們只能從GUI或是從各個gcloud CLI去撈取所有資源的API。
但是今天 terraform 提供了另外一個方法,我們可以用寫 HCL 的語言去定義我們的 Infra ,並且在部署後看到資源的狀態。實現了我們可以把 Infrastructure 定義在 Code 的層面。後面則可以交由 CI/CD 甚至是使用 GitOps 來 Deploy 我們的 Infrastructure 。並且可以在寫好 IaC 的 Code 之後分散到不同的環境中,像是 Dev/Staging(UAT)/Production。達到 Keep Code DRY 的目標。
因此今天我們會先介紹 Terraform 這個工具的基礎應用, 接下來我們再一步步深入 Terraform 細節.
Terraform 是一個由 HashiCorp 所開發出來的 IaC Tool 大家可以到 HashiCorp 的官網直接下載 Terraform 的執行檔。但是我們有時候會需要管理不一樣的 Terraform 版本,所以我們可以使用 tfenv 這套軟體來管理我們的 Terraform 版本。
像筆者使用Mac可以下
brew install tfenv
其他的系統可以依照 tfenv github 的 README 安裝網址如下
https://github.com/tfutils/tfenv/blob/master/README.md
安裝完畢後我們可以先使用 list-remote 看有哪些版本 然後安裝想要使用的版本
tfenv list-remote
tfenv install 1.2.4
Installing Terraform v1.2.4
Downloading release tarball from https://releases.hashicorp.com/terraform/1.2.4/terraform_1.2.4_darwin_amd64.zip
tfenv use 1.2.4
在使用 tfenv use 1.2.4 之後我們就可以開始使用terraform啦
terraform version
Terraform v1.2.4
on darwin_amd64
首先呢 terraform 大致上分成以下幾個檔案
我們先來一個最簡單的例子, 我們可以參考
terraform registry google compute instance
來寫我們的terraform
main.tf
resource "google_compute_instance" "default" {
name = "testvm"
machine_type = "e2-micro"
zone = var.zone
boot_disk {
initialize_params {
image = "debian-cloud/debian-10"
}
}
network_interface {
network = "default"
}
}
variable.tf
variable "zone" {
type = string
}
terraform.tfvars
zone = "us-west1-a"
如果你是在GCP console裡面寫terraform file則可以馬上執行
可以在目錄中下terraform init
terraform init
terraform plan
在terraform plan 我們可以檢查一下語法和要開啟的機器有沒有設定上面符合我們預期的樣子
之後下terraform apply 然後選yes
如果成功就會在GCP console上看到一台VM啦
下一篇我們會介紹 terraform 如何使用 GCP 的 credential 以及怎麼使用gcs來當做storage backend
推 Terraform IaC 參賽主題
祝順利完賽
感謝你, 原來也是terraform高手, 祝福你也順利完賽