iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

文章目標:分享如何透過 bash alias 提高 Terraform 開發效率。

Day 7 — Terraform基礎 — 效率提升:使用 bash alias

文章同步分享到

提高 Terraform 開發效率

透過設定 bash alias(命令別名),可以極大提高 Terraform 開發的效率,這是因為使用別名可以節省大量時間,減少在終端機中輸入命令的時間。這樣可以更有效率地完成整個 Terraform 工作流程,並加速基礎架構的開發。我自己使用可以提高 Terraform 至少30%以上開發效率,所以我們非常推薦使用bash alias,認真不騙。

使用bash alias

Terraform工作流 ( Workflow ) 的概念(Option:前篇已經介紹)

Workflow的實際執行位置

在Terraform工作流中,分成兩個主要部分會在不同的地方執行。

  1. Terraform init / fmt / validate / plan :都會在本地電腦完成配置與撰寫

  2. Terraform apply / destroy :會在雲端/地端架構中實際執行。

Workflow的相關說明

  1. Terraform init:初始化本地 Terraform 環境

  2. Terraform fmt / validate:格式化 Terraform 代碼與驗證 Terraform 代碼的語法與結構。

  3. Terraform plan:比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫,不會實際改變部署環境。

  4. Terraform apply:根據計畫執行實際的基礎架構創建或更改操作。

  5. Terraform destroy:刪除此特定 Terraform 環境所管理的所有資源。

Terraform工作流 ( Workflow ) 的概念

實際Terraform操作

任務目標

  1. 使用GCP的cloud shell環境,來執行terraform

  2. 使用bash alias後,在執行一次先前的專案,感受生產力的差異

alias tf="terraform"
alias tfv="terraform validate"
alias tfdp="terraform apply -auto-approve plan.out"
alias tfd="terraform apply -auto-approve"
alias tfr="terraform destroy -auto-approve"
alias tfp="terraform plan -out plan.out"

使用bash alias

創建GCP專案(Option:前篇已經介紹)

到GCP的專案頁面 https://console.cloud.google.com/,點選左上角選擇專案的視窗創建一個專案tf101

  • 記得你的專案ID,後面會用到

創建GCP專案

創建GCP專案名稱

啟動cloud shell並輸入代碼(Option:前篇已經介紹)

創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。

啟動cloud shell

新建或開啟main.tf的檔案

進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。

這段 Terraform 代碼是用來管理 Google Cloud Platform (GCP) 資源的,主要是創建一個 Google Cloud Storage (Bucket)。

記得你需要將 <your gcp project> 替換為實際的 GCP 專案名稱。

  • provider 用來指定 Terraform 將要使用的提供者,這裡是 “google”,表示要使用 Google Cloud 的資源。
  • project 是你的 GCP 專案名稱,你需要將 替換為實際的 GCP 專案名稱。
    region 是指定 GCP 資源所在的區域,這裡是 “asia-east1”,表示將在亞洲的東部區域創建資源。
  • resource 塊用來定義要創建的資源,這裡是一個 Google Cloud Storage 存儲資源,它將被命名為 “quick-start-gcs-bucket”。
  • location 指定了存儲資源所在的區域,這裡也是 “asia-east1”,與上述提供者的區域相同。
  • force_destroy 設置為 true 意味著在刪除這個 Terraform 設定時,Terraform 會試圖強制刪除這個存儲資源,即使它包含了資源。

範例程式碼(Option:前篇已經介紹)

可以到下方的github連結中,下載對應的參考程式碼

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Day 6- Terraform基礎 -Terraform 工作流程

    provider "google" {
      project = "<your gcp project>"
      region  = "asia-east1"
    }

    resource "google_storage_bucket" "quick-start-gcs" {
      name          = "quick-start-gcs-bucket"
      location      = "asia-east1"
      force_destroy = true
    }

範例程式碼 on cloud shell

Terraform tip 快捷鍵修改

  1. 打開終端機中的 .bashrc or .zshrc 檔案: vim ~/.basrc 或是 vim ~/.zshrc。

  2. 在文件最下方加入下列指令。

  3. 執行 source ~/.zshrc 或是 source ~/.bashrc 讓下面的 alias 快捷鍵生效。

alias tf="terraform"
alias tfv="terraform validate"
alias tfdp="terraform apply -auto-approve plan.out"
alias tfd="terraform apply -auto-approve"
alias tfr="terraform destroy -auto-approve"
alias tfp="terraform plan -out plan.out"

使用bash alias

vim ~/.basrc

嘗試執行terraform的五個步驟部署代碼

接下來我們會利用上面的範例程式碼,來進行後續的練習:

1. 初始化本地 Terraform 環境

tf init

2. 格式化 Terraform 代碼。驗證 Terraform 代碼的語法與結構

tf fmt
tf validate

3. 比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫

tfp

4. 根據計畫執行實際的基礎架構創建或更改操作

tfdp

5. 執行制定計畫與實際的基礎架構創建或更改操作 (3+4)

tfd

6. 刪除此特定 Terraform 環境所管理的所有資源

tfr

  1. 初始化本地 Terraform 環境 (tf init):此命令用於初始化 Terraform 專案。它會下載所需的提供者插件,確保 Terraform 可以正確地管理你的基礎架構。執行此命令後,通常會在工作目錄中生成一個名為 .terraform 的目錄。

  2. 格式化 Terraform 代碼 (tf fmt) 和驗證代碼 (tf validate)
    tf fmt 用於自動格式化 Terraform 代碼,以確保代碼風格一致且易讀。
    tf validate 用於驗證 Terraform 代碼的語法和結構是否正確,有助於檢查是否存在語法錯誤或不合規範的部分。

  3. 比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫 (tfp): tfp命令用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構的實際狀態,並列出預計創建、變更或刪除的資源。這有助於你了解 Terraform 將對基礎架構進行的操作,但不會實際執行這些操作。

  4. 根據計畫執行實際的基礎架構創建或更改操作 (tfdp ):tfdp 命令用於根據之前生成的計畫執行實際的基礎架構操作。這包括創建新的資源、更新現有的資源或刪除不再需要的資源。在執行此命令之前,你應該仔細審查 tf plan 的輸出,確保操作是符合預期的。

  5. 執行比較計畫並進行基礎架構創建或更改操作 (tfdp ):tfdp 命令用於用於生成一個執行計畫並執行實際的基礎架構操作。操作等同於第三項與第四項,通常用於簡單不需要確認的部署,或是反覆多次的操作。

  6. 刪除此特定 Terraform 環境所管理的所有資源 (tfr):tfr命令用於刪除由 Terraform 管理的所有資源,將基礎架構還原到初始狀態。請謹慎使用此命令,因為它會永久刪除資源。

步驟一:terraform init -> tf init

  1. 在vscode上開啟終端機,來執行terraform的部署

  2. 執行 tf init 初始化本地 Terraform 環境。

步驟一:terraform init 開啟終端機

步驟一:執行terraform init

步驟二:terraform fmt -> tf fmt與 terraform validate -> tfv

  • 執行 tf fmt 可以格式化 Terraform 代碼。

  • 執行 tfv可以驗證 Terraform 代碼的語法和結構是否正確 。

步驟二:terraform fmt -&gt; tf fmt與 terraform validate -&gt; tfv

步驟三:terraform plan -> tfp

  • 執行 tfp 用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構的實際狀態,並列出預計創建、變更或刪除的資源。

  • 這段 Terraform 代碼主要是創建一個 Google Cloud Storage (Bucket)。

步驟三:terraform plan

步驟四:terraform apply -> tfdp

  • 執行 tfdp用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構。

  • 部署架構,並等待生成完成。

  • 到GCP的GCS中確認資源生成

步驟四:terraform apply -&gt; tfdp

步驟四:terraform apply -&gt; tfdp (GCS)

步驟四:在GCP介面上看到GCS已經創建

步驟五:terraform destroy -> tfr

  • 執行 terraform plan 命令用於刪除由 Terraform 管理的所有資源,將基礎架構還原到初始狀態。

  • 點選yes同意移除架構,並等待移除完成。

  • 到GCP的GCS中確認資源消失

步驟五:terraform destroy -&gt; tfr

步驟五:terraform destroy -&gt; tfr 移除架構

步驟五:在GCP介面上看到GCS已經刪除

總結 Summary

  1. 透過 bash alias(命令別名)提高 Terraform 開發效率: Terraform 工作流程包括初始化、格式化、計畫、應用和刪除等步驟。透過別名,我們可以簡化這些步驟的命令,例如使用 tf 代替 terraform

  2. Terraform工作流 ( Workflow ):再次了解工作流中五個流程的各自定位,與 Terraform init / fmt / validate / plan / apply / destroy 指令各自代表的意義。

  3. 執行terraform的五個步驟部署代碼:實際部署了解一個 Google Cloud Storage (Bucket),並在cloud shell上做操作。透過這些簡潔的別名,更迅速地執行 Terraform 任務,提高開發效率並簡化工作流程。

  • 初始化本地 Terraform 環境:tf init
  • 格式化 Terraform 代碼和驗證:tf fmttfv
  • 生成 Terraform 執行計畫:tfp
  • 執行計畫並進行基礎架構創建或更改操作:tfdp
  • 刪除 Terraform 管理的所有資源:tfr

相關連結

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Codehttps://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code

  2. Terraform-project-best-practicehttps://github.com/qwedsazxc78/terraform-project-best-practice

  3. 歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform


上一篇
Day 6— Terraform基礎 —Terraform 工作流程
下一篇
Day 8— Terraform基礎 — Provider version 的概念與使用
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言