Day 7— Terraform基礎 —效率提升:使用 bash alias
文章目標:分享如何透過 bash alias 提高 Terraform 開發效率。
- Day1 — Introduction — 現代 IT 架構問題與解決方案
- Day 2 — Introduction — Terraform 與基礎架構即代碼 (IAC) 的解決方案
- Day 3 — Terraform 基礎 — 申請 GCP 免費帳號
- Day 4 — Terraform基礎 — Terraform 簡介與安裝
- Day 5 — Terraform基礎 — 掌握 Terraform 元件
- Day 6 — Terraform基礎 — Terraform 工作流程
- Day 7 — Terraform基礎 — 效率提升:使用 bash alias
- Day 8 — Terraform基礎 — Provider version 的概念與使用
- Day 9 — Terraform基礎 — 資源 (Resources) 的概念與使用
- Day 10 — Terraform基礎 — 配置器 Provisioners 的概念與使用
- Day 11 — Terraform基礎 — 變數 (Variables) 與輸出 (Outputs)
- Day 12 — Terraform基礎 — 變數 (Variables) 種類與使用順序
- Day 13 — Terraform基礎 — 資料來源 Data Sources 的概念與使用
- Day 14 — Terraform基礎 — State 的概念與使用
- Day 15 — Terraform基礎 — Backend 遠端狀態後台的概念與使用
- Day 16 — Terraform/GCP基礎 — GCP服務帳號 (Service Account) 與使用者 (User) 的差異
- Day 17 — Terraform/GCP基礎 — 設定 GCP 服務帳號 Service Account
- Day 18 — Terraform/GCP基礎 — 連結 Terraform 與 GCP:使用者帳號與密碼
- Day 19 — Terraform/GCP基礎 — 建議的 Terraform 開發最佳實踐 best practices
- Day 20 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 運算資源服務
- Day 21 — Terraform/GCP實戰:使用 Terraform 創建 GCP 運算資源服務
- Day 22 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 無伺服器服務Cloud Function
- Day 23 — Terraform/GCP實戰:使用 Terraform 創建 GCP 無伺服器服務Cloud Function
- Day 24 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 無伺服器服務 (Cloud Run)
- Day 25 — Terraform/GCP實戰:使用 Terraform 創建 GCP 無伺服器服務 (Cloud Run)
- Day 26 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 運算服務 Kubernetes GKE
- Day 27 — Terraform/GCP實戰 :使用 Terraform 創建 GCP 運算服務 Kubernetes GKE
- Day 28 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
- Day 29 — Terraform/GCP實戰:使用 Terraform 創建 GCP 資料庫服務 Cloud Sql (PostgreSQL)
- Day 30 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 資料庫服務 Cloud MemoryStore — Redis
- Day 31 — Terraform/GCP實戰:使用 Terraform 創建 GCP 資料庫服務Cloud MemoryStore — Redis
提高 Terraform 開發效率
透過設定 bash alias(命令別名),可以極大提高 Terraform 開發的效率,這是因為使用別名可以節省大量時間,減少在終端機中輸入命令的時間。這樣可以更有效率地完成整個 Terraform 工作流程,並加速基礎架構的開發。我自己使用可以提高 Terraform 至少30%以上開發效率,所以我們非常推薦使用bash alias,認真不騙。
Terraform工作流 ( Workflow ) 的概念(Option:前篇已經介紹)
Workflow的實際執行位置:
在Terraform工作流中,分成兩個主要部分會在不同的地方執行。
- Terraform init / fmt / validate / plan :都會在本地電腦完成配置與撰寫
- Terraform apply / destroy :會在雲端/地端架構中實際執行。
Workflow的相關說明:
- Terraform init:初始化本地 Terraform 環境
- Terraform fmt / validate:格式化 Terraform 代碼與驗證 Terraform 代碼的語法與結構。
- Terraform plan:比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫,不會實際改變部署環境。
- Terraform apply:根據計畫執行實際的基礎架構創建或更改操作。
- Terraform destroy:刪除此特定 Terraform 環境所管理的所有資源。
實際Terraform操作
任務目標:
- 使用GCP的cloud shell環境,來執行terraform
- 使用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"
創建GCP專案(Option:前篇已經介紹):
到GCP的專案頁面 https://console.cloud.google.com/,點選左上角選擇專案的視窗創建一個專案tf101
- 記得你的專案ID,後面會用到
啟動cloud shell並輸入代碼(Option:前篇已經介紹)
創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。
進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。
這段 Terraform 代碼是用來管理 Google Cloud Platform (GCP) 資源的,主要是創建一個 Google Cloud Storage (Bucket)。
記得你需要將 <your gcp project> 替換為實際的 GCP 專案名稱。
- provider 用來指定 Terraform 將要使用的提供者,這裡是 “google”,表示要使用 Google Cloud 的資源。
- project 是你的 GCP 專案名稱,你需要將 <your gcp project> 替換為實際的 GCP 專案名稱。
region 是指定 GCP 資源所在的區域,這裡是 “asia-east1”,表示將在亞洲的東部區域創建資源。 - resource 塊用來定義要創建的資源,這裡是一個 Google Cloud Storage 存儲資源,它將被命名為 “quick-start-gcs-bucket”。
- location 指定了存儲資源所在的區域,這裡也是 “asia-east1”,與上述提供者的區域相同。
- force_destroy 設置為 true 意味著在刪除這個 Terraform 設定時,Terraform 會試圖強制刪除這個存儲資源,即使它包含了資源。
範例程式碼(Option:前篇已經介紹)
可以到下方的github連結中,下載對應的參考程式碼
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
}
Terraform tip 快捷鍵修改
- 打開終端機中的 .bashrc or .zshrc 檔案:
vim ~/.basrc
或是vim ~/.zshrc
。 - 在文件最下方加入下列指令。
- 執行 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"
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
- 初始化本地 Terraform 環境 (
tf init
):此命令用於初始化 Terraform 專案。它會下載所需的提供者插件,確保 Terraform 可以正確地管理你的基礎架構。執行此命令後,通常會在工作目錄中生成一個名為.terraform
的目錄。 - 格式化 Terraform 代碼 (
tf fmt
) 和驗證代碼 (tf validate
):tf fmt
用於自動格式化 Terraform 代碼,以確保代碼風格一致且易讀。tf validate
用於驗證 Terraform 代碼的語法和結構是否正確,有助於檢查是否存在語法錯誤或不合規範的部分。 - 比較 Terraform 狀態和雲端中實際狀態,建立並顯示一個執行計畫 (
tfp
):tfp
命令用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構的實際狀態,並列出預計創建、變更或刪除的資源。這有助於你了解 Terraform 將對基礎架構進行的操作,但不會實際執行這些操作。 - 根據計畫執行實際的基礎架構創建或更改操作 (
tfdp
):tfdp
命令用於根據之前生成的計畫執行實際的基礎架構操作。這包括創建新的資源、更新現有的資源或刪除不再需要的資源。在執行此命令之前,你應該仔細審查tf plan
的輸出,確保操作是符合預期的。 - 執行比較計畫並進行基礎架構創建或更改操作 (
tfdp
):tfdp
命令用於用於生成一個執行計畫並執行實際的基礎架構操作。操作等同於第三項與第四項,通常用於簡單不需要確認的部署,或是反覆多次的操作。 - 刪除此特定 Terraform 環境所管理的所有資源 (
tfr
):tfr
命令用於刪除由 Terraform 管理的所有資源,將基礎架構還原到初始狀態。請謹慎使用此命令,因為它會永久刪除資源。
步驟一:terraform
init -> tf init
- 在vscode上開啟終端機,來執行terraform的部署
- 執行
tf init
初始化本地 Terraform 環境。
terraform init 開啟終端機
terraform init
步驟二:terraform fmt -> tf fmt與
terraform validate -> tfv
- 執行
tf fmt
可以格式化 Terraform 代碼。 - 執行
tfv
可以驗證 Terraform 代碼的語法和結構是否正確 。
terraform fmt -> tf fmt與
terraform validate -> tfv步驟三:terraform plan -> tfp
- 執行
tfp
用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構的實際狀態,並列出預計創建、變更或刪除的資源。 - 這段 Terraform 代碼主要是創建一個 Google Cloud Storage (Bucket)。
步驟四:terraform apply -> tfdp
- 執行
tfdp
用於生成一個執行計畫,它會比較你的 Terraform 配置文件與雲端基礎架構。 - 部署架構,並等待生成完成。
- 到GCP的GCS中確認資源生成
步驟五:terraform destroy -> tfr
- 執行
terraform plan
命令用於刪除由 Terraform 管理的所有資源,將基礎架構還原到初始狀態。 - 點選yes同意移除架構,並等待移除完成。
- 到GCP的GCS中確認資源消失
總結 Summary
- 透過 bash alias(命令別名)提高 Terraform 開發效率: Terraform 工作流程包括初始化、格式化、計畫、應用和刪除等步驟。透過別名,我們可以簡化這些步驟的命令,例如使用 `tf` 代替 `terraform`。
- Terraform工作流 ( Workflow ):再次了解工作流中五個流程的各自定位,與 Terraform init / fmt / validate / plan / apply / destroy 指令各自代表的意義。
- 執行terraform的五個步驟部署代碼:實際部署了解一個 Google Cloud Storage (Bucket),並在cloud shell上做操作。透過這些簡潔的別名,更迅速地執行 Terraform 任務,提高開發效率並簡化工作流程。
- 初始化本地 Terraform 環境:`tf init`
。
- 格式化 Terraform 代碼和驗證:`tf fmt` 和 `tfv`
。
- 生成 Terraform 執行計畫:`tfp`
。
- 執行計畫並進行基礎架構創建或更改操作:`tfdp`
。
- 刪除 Terraform 管理的所有資源:`tfr`
。
相關連結
- Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
- Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
- 歡迎訂閱我的udemy課程:Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程