iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
DevOps

不想吃土嗎?就利用開源軟體打造CICD Pipeline吧!系列 第 22

Day 22: 讓我定義你的基礎架構!Terraform!

  • 分享至 

  • xImage
  •  

昨天談到基礎架構即程式碼,那麽今天,我們就介紹一下其中一款常用的工具,Terraform。

Terraform是一款由HashiCorp以Go語言寫成的基礎架構即程式碼。常用於管理雲端服務平台上的服務器架構。Terraform以宣告式的組態語言去描述基礎架構。開發人員可以編寫自己所需要的架構的最終狀態,Terraform會跟據其中定義的內容去生成相應所需要的資源,而並不需要編寫生成資源的步驟。

當我們進行部署時,一般會把程式放到數據中心或是雲端服務器中。因此,我們今天就嘗試用Terraform在GCP上面編寫我們的所需要的架構,生成第一部虛擬機器,為我們以後在上面部署我們的程式作準備。

那麽今天,我們就一起學習安裝並使用Terraform生成我們需要的資源吧!

安裝Terraform

使用Mac OS安裝Terraform非常簡單,只需要利用Homebrew進行安裝。

先在Terminal運行以下指令。

brew tap hashicorp/tap

https://ithelp.ithome.com.tw/upload/images/20221003/20152012rn4JayKrCq.png

然後運行以下指令安裝Terraform。

brew install hashicorp/tap/terraform

https://ithelp.ithome.com.tw/upload/images/20221003/20152012Pbu8cH4wJu.png

安裝完成。

使用Terraform生成第一個雲端虛擬機器

新增專案及Service Acocunt

首先我們需要在GCP新增一個專案。
https://ithelp.ithome.com.tw/upload/images/20221003/20152012sr9saL1HrN.png

新增完成後在通知視窗中按下Select Project進入新專案。
https://ithelp.ithome.com.tw/upload/images/20221003/20152012povwCaW8qH.png
https://ithelp.ithome.com.tw/upload/images/20221003/201520122veIQK157P.png

然後在選單中找到IAM & Admin->Service Accounts
https://ithelp.ithome.com.tw/upload/images/20221003/20152012oNwGAaCGrz.png

然後按下Create Service Account
https://ithelp.ithome.com.tw/upload/images/20221003/20152012dBUTAwxuNt.png

輸入Service account name,然後按下Create and Continue
https://ithelp.ithome.com.tw/upload/images/20221003/20152012ytsEoWFKUM.png

然後,為我們的Service Account加入Compute Admin的權限,再按下Continue
https://ithelp.ithome.com.tw/upload/images/20221003/20152012xEhixCbTvK.png

最後按下Done
https://ithelp.ithome.com.tw/upload/images/20221003/20152012p2Dhbge5eh.png

可以看到已經成功新增了一個Service Account。
https://ithelp.ithome.com.tw/upload/images/20221003/20152012Ym1CwMUKIh.png

然後我們進入新增了的Service Account的詳情頁面,再進入KEYS的分頁。找到並按下Add Key->Create new key
https://ithelp.ithome.com.tw/upload/images/20221003/20152012EfAlV7kH09.png

選擇JSON並按下Create
https://ithelp.ithome.com.tw/upload/images/20221003/20152012KaPTVAqvS6.png

馬上會下載一個JSON檔案,把它儲存到專案中。
https://ithelp.ithome.com.tw/upload/images/20221003/20152012xKutvBQpwv.png

啟用APIs

要讓Terraform在GCP生成機器,必須使用GCP提供的API。因此我們要先為專案啟用相關的API。

在選單中找到APIs & Services->Enabled APIs & services
https://ithelp.ithome.com.tw/upload/images/20221003/20152012nEAvUrnDMm.png

然後搜尋Compute Engine API
https://ithelp.ithome.com.tw/upload/images/20221003/201520127WJGHLQPmV.png
按下第一個結果。

然後按下Enable
https://ithelp.ithome.com.tw/upload/images/20221003/20152012HQHgW3P5vk.png

成功啟用API。
https://ithelp.ithome.com.tw/upload/images/20221003/20152012YkUHtfXSAO.png

同樣的做法,啟用OS Login API
https://ithelp.ithome.com.tw/upload/images/20221003/20152012IQCc6WvXlc.png

使用Terraform

首先,在我們的專案中,新增一個main.tf的檔案。然後加入以下內容。

resource "random_id" "instance_id" {
    byte_length = 6
}

provider "google" {
    credentials = file("ironman-2022-f6b3820bc98f.json")
    project     = "ironman-2022"
    region      = "asia-east1"
}

resource "google_compute_instance" "helloworld_instance" {
  name         = "helloworld-vm-${random_id.instance_id.hex}"
  machine_type = "f1-micro"
  zone         = "asia-east2-a"
  tags         = ["ssh"]

  metadata = {
    enable-oslogin = "TRUE"
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  # Install Flask
  metadata_startup_script = "sudo apt-get update; sudo apt-get install -yq build-essential python-pip rsync; pip install flask"

  network_interface {
    network = "default"

    access_config {
      # Include this section to give the VM an external IP address
    }
  }
}

這裡不一一解釋整個檔案的內容,請參考GCP的官方文檔。這裡只講解幾個重要的部份。

  • provider "google" {…}: 代表我們要使用GCP的Provider,並對我們的GCP連接進行設定
  • credentials = file("ironman-2022-f6b3820bc98f.json"): 連接到GCP要使用Credential進行認證,亦即是使用我們剛剛下載回來的JSON檔案
  • resource "google_compute_instance" "helloworld_instance" {…}: 代表我們要生成一個虛擬機器,並在當中對VM的配置進行設定

第一步,我們需要對Terraform進行初始化設定。我們在Terminal中運行以下指令。

terraform init

https://ithelp.ithome.com.tw/upload/images/20221003/20152012K0EKQwPpbI.png

然後我們可以運行以下指令,來檢查Terraform將會按我們的main.tf進行甚麼操作。

terraform plan

https://ithelp.ithome.com.tw/upload/images/20221003/20152012cpgg3dzqbH.png

最後,如果没有問題,可以用以下指令生成我們需要的架構。

terraform apply

途中會要求你確認正式進行架構上的修改。輸入yes即可。
https://ithelp.ithome.com.tw/upload/images/20221003/201520128DWQvcIsIL.png

成功運行後,我們可以在GCP的面頁中看到新增的虛擬機器。
https://ithelp.ithome.com.tw/upload/images/20221003/201520122TqqdEVrAY.png

小結

今天我們學習了基本的Terraform使用,那麼明天我想大家都猜到了,當然就是把這個動作完全自動化了。明天我們將會用Jenkins去啟動Terraform的部署。

題外話

補充一點,是次系列主要是介紹及簡單應用相關的工具。在這個系列的整個建置過程中,有很多安全性及管理上的Best Practice都並未有很好地完成。在這邊再提醒一下大家,在建CICD Pipeline時,要留意相關的設計及操作哦!


上一篇
Day 21: 持續部署的利器!基礎架構即程式碼!
下一篇
Day 23: 神說:要有VM,就有VM!讓Jenkins + Terraform成神!
系列文
不想吃土嗎?就利用開源軟體打造CICD Pipeline吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言