Skip to content

880831ian/terraform-gce

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

使用 Terraform 建立 Google Compute Engine

嗨嗨大家好,距離上一篇筆記又隔了 3 個月,最近公司有專案在忙,沒時間把上次提到的 Terraform 應用筆記寫完,現在他來拉~~~ 😂 我們這次的主題是使用 Terraform 來建立 Google Compute Engine 的機器,想知道要怎麼用一段程式碼就可以建立、修改、刪除 Google Compute Engine 的機器一定要來看這一篇~我們開始囉 🧑‍💻


撰寫 Google Compute Engine tf 檔案

相信大家有先看完上一篇 什麼是 IaC ? Terraform 又是什麼? 才來看這一篇的對吧 😎,對於 Terraform 的程式架構及指令,我們這邊就不多做介紹,我們直接來看程式要怎麼寫~(程式碼主要是參考官方文件,加上一些其他的設定來做介紹,程式碼也會同步到 Github ,需要的也可以去 Clone 來使用歐! Github 程式碼連結 )


小提醒:由於程式碼較長,我將他拆開來說明 💖


選擇供應者以及對應的專案

provider "google" {
  project = "gcp-20210526-001"
}

由於我們要建立的 Google Compute Engine 是由 Google 所提供的 api 來建立的,所以一開始要先設定好提供者的名稱 google 以及我們要在哪一個 GCP 的專案 ID


resource 設定

接下來的設定都會放在以下的 google_compute_instance resource 內,為了方便介紹,就不會標明 google_compute_instance,詳細完整程式碼請參考 GitLab Github 程式碼連結

resource "google_compute_instance" "default" {
}

基本設定

  name        = "test"
  description = "我是 test 機器"
  machine_type = "n2-standard-8"
  zone = "asia-east1-b"
  tags = ["test"]

  labels = {
    env  = "test"
  }

  deletion_protection = "true"
  • name:GCE 要求資源的唯一名稱。如果有更改此項會直接強制創建的新資源 (必填)
  • description:對此資源的簡單說明 (選填)
  • machine_type:要創建的機器類型 (必填)
  • zone:創建機器的所在區域,若沒有填寫,則會使用提供者的區域 (選填)
  • tags:附加到實體的網路標籤列表 (選填)
  • labels:一組分配給 disk 的 key/value 標籤 (選填)
  • deletion_protection:刪除保護,預設是 false,當我們使用 terraform destroy 刪除 GCE 時,必須先改成 false,才可以刪除,否則會無法刪除且 Terraform 運行也會失敗,算是一個保護機制,後面再刪除 Google Compute Engine 時會測試畫面 (選填)

啟動 disk 設定

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-10-buster-v20210512"
      type = "pd-balanced"
      size = "50"
    }
  }
  • image:初始化此 disk 的 image (選填)
  • type:GCE disk 類型 (選填)
  • size:image 大小,已 GB 為單位,如果未指定,將會繼承其初始化 disk 的 image 大小 (選填)

網路設定

  network_interface {
    network = "projects/rd-gateway/global/networks/rd-common"
    subnetwork = "projects/rd-gateway/regions/asia-east1/subnetworks/rd-common-asia-east1-pid-cicd"

    access_config {
      nat_ip = ""
    }

  }
  • network:設定附加到的網路名稱或是 self_link (選填)
  • subnetwork:設定附加到的子網路名稱或是 self_link (選填)
  • nat_ip:如果想要有外網的 ip,必須加上此參數,才會產生一組外網 ip (選填)

權限設定

  service_account {
    email  = "676962704505-compute@developer.gserviceaccount.com"
    scopes = ["storage-rw", "logging-write", "monitoring-write", "service-control", "service-management", "trace"]
  }
  • email:服務帳戶電子郵件地址。如果未提供,則使用預設的 Google Compute Engine 服務帳戶 (選填)
  • scopes:服務範圍列表,可以點我查看範圍的完整列表 (必填)

以上只是我在建立 Google Compute Engine 最簡單的設定,當然還有很多其他的設定,可以參考 registry.terraform.io/providers (google_compute_instance) 裡面有更多的 resource 設定,有需要的就自己來看看吧 🧐


建立 Google Compute Engine

當我們寫好 Google Compute Engine tf 檔案後,我們接著把他建立,建立前要先使用 terraform init 來做初始化


圖片


接著可以先使用 terraform plan 來查看我們的設定是否是我們想要的,或是直接用 terraform apply 來建立 Google Compute Engine


圖片


可以看到成功建立我們的 test Google Compute Engine(也可以看到因為我們有開 nat_ip 所以有外部 IP)


圖片


修改 Google Compute Engine

當我們發現我們建立的 Google Compute Engine 參數有錯,想要修改時,我們只需要修改程式碼部分,並重新下一次 terraform apply 來修改 Google Compute Engine,就會看到以下畫面 (有些設定檔是不能修改的,若修改他會重新創建一個新的機器,像是 name 之類的,使用時要小心一點 😉)

我們拿剛剛提到的 nat_ip,我們先把它註解掉,再下 terraform apply 看看機器有什麼變化~


圖片


可以看到他會提示說,他會改變 network_interface,也移除 access_config 的設定,執行後的 Resources 也會從剛剛的 added 變成 changed,我們看一下 GCP 有沒有改變:


圖片


可以看到原本的外部 IP 位置被改掉了~ 最後提醒:如果有使用 terraform 來修改資源設定,不能動到特定的項目,不然他的流程是先把原本的給刪掉,再重新建立一個新的,原本的機器沒有備份,東西就會不見歐~


刪除 Google Compute Engine

最後假如我們要刪除 Google Compute Engine,也可以使用 terraform 的指令來刪除,我們順便來測試一下上面有設定的 deletion_protection 刪除保護機制是不是正常~

目前 deletion_protection 還是 true,我們直接下 terraform destroy,看看是否可以刪除 Google Compute Engine


圖片


可以看到他會提醒你說 Deletion Protection is enabled,必須先把他改成 false terraform apply 後才可以刪除~


圖片


現在 deletion_protection 是 false,我們就可以下 terraform destroy 來刪除 Google Compute Engine 🔪


圖片


圖片


以上就是簡單的使用 Terraform 建立 Google Compute Engine 介紹囉~歡迎大家留言指教,明天的文章是介紹如何使用 Terraform 建立 GKE 💕


參考資料

registry.terraform.io/providers (google_compute_instance)

About

使用 Terraform 建立 Google Compute Engine

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages