iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
DevOps

Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構系列 第 25

Day 25 — Terraform/GCP實戰:使用 Terraform 創建 GCP 無伺服器服務 Cloud Run

  • 分享至 

  • xImage
  •  

使用 Terraform 創建 Cloud Run 服務,實現容器化應用部署。

Terraform/GCP實戰:使用 Terraform 創建 GCP 無伺服器服務 Cloud Run

文章同步分享到

1. GCP 無伺服器服務Cloud Run 主要功能、用途與使用情境

GCP 無伺服器服務Cloud Run 的主要功能、用途與使用情境,可以參考先前的章節來做了解,會更幫助我們了解對應用terraform產生的雲端資源。

Terraform/GCP實戰:使用 GCP Console 創建無伺服器服務Cloud Run

GCP 無伺服器服務Cloud Run

2. GCP 無伺服器服務 — 使用Terraform創建Cloud Run

在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建Cloud Run。我們將依次進行以下步驟:

  1. 使用已經好的創建 nginx:1.23.4-alpine

  2. 創建對應的cloud run 容器

  3. 設定容器流量的的條件

  4. 登入cloud run 的網址,確認服務啟動

  5. Terraform Cloud Run 連結:可以到github參考對應的Terraform程式碼。

創建terraform檔案

接著創建三個檔案,分別是 0-provider.tf, 1-variables.tf, 2-main.tf。

0-provider.tf

##################################################################################
# CONFIGURATION
##################################################################################
terraform {
    required_version = ">=1.0"
    required_providers {
    google = {
        source  = "hashicorp/google"
        version = ">= 4.40.0"
    }
    }
}

provider "google" {
    project = var.GCP_PROJECT
    # region  = var.GCP_REGION
    # zone        = var.zone
}

這個檔案主要用於配置 Terraform 的提供者(provider),以確保 Terraform 可以正確地與 Google Cloud Platform(GCP)進行交互。

  • terraform :這個區塊設定了 Terraform 的版本要求,確保使用的版本符合最低要求大於4.40.0版本。同時,它也定義了所需的提供者和版本。

  • provider "google" :這個區塊指定了要使用的 GCP 提供,指定了 GCP 專案 ID(由 var. GCP_PROJECT 變數提供)。

1-variables.tf

variable "GCP_PROJECT" {
  description = "GCP Project ID"
  type        = string
  default     = "terraform101-384507"
}

variable "GCP_REGION" {
  type    = string
  default = "asia-northeast1"
}

variable "container_name" {
  type    = string
  default = "cloud-run-tf-ch4-6-3"
}

這個檔案用於定義 Terraform 使用的變數,以實現更高度的可配置性和重用性。

  • variable "GCP_PROJECT":這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 "terraform101-384507",但可以在使用時指定不同的值。

  • variable "GCP_REGION":這是定義網路服務所在位置(地區)的變數。

  • variable "container_name":這是用於定義 Google Cloud Run 名稱的變數。

2-main.tf

##################################################################################
# RESOURCE
##################################################################################
resource "google_cloud_run_service" "cloud_run_service" {
  name     = var.container_name
  location = var.GCP_REGION
  template {
    spec {
      containers {
        # 下載檔案 docker hub - https://hub.docker.com/_/nginx
        image = "nginx:1.23.4-alpine"
        ports {
          name           = "http1"
          container_port = 80
        }
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

# IAM 所有人都可以去access
resource "google_cloud_run_service_iam_member" "public_access" {
  location = google_cloud_run_service.cloud_run_service.location
  project  = google_cloud_run_service.cloud_run_service.project
  service  = google_cloud_run_service.cloud_run_service.name

  role   = "roles/run.invoker"
  member = "allUsers"
}

output "cloud_run_url" {
  value = google_cloud_run_service.cloud_run_service.status[0].url
}

這段 Terraform 程式碼的目的是使用 Terraform 工具自動化地在 Google Cloud Platform 上創建一個 Cloud Run,並將相關的資源設定和配置進行定義。:

Google Cloud Run服務設定,這部分代碼用於定義Google Cloud Run服務的設定 (google_cloud_run_service.cloud_run_service):

  • name: 服務的名稱是由變數var.container_name指定的。

  • location: 服務的位置是由變數var. GCP_REGION指定的。

  • template: 這個部分定義了Cloud Run服務的模板,包括容器的設定。其中包含spec、containers、image、ports 等設定

  • spec: 定義服務的規格,包括容器的配置。

  • containers: 定義容器的相關設定。

  • image: 這裡使用的容器映像檔是"nginx:1.23.4-alpine",表示使用Nginx Web伺服器。

  • ports: 定義容器的通訊埠設定,此處將容器的80號通訊埠映射為名為"http1"的通訊埠。

  • traffic: 設定流量路由,這裡的設定將100%的流量路由到最新的服務版本。

  • latest_revision:會使用最新的版本運行。

設定Cloud Run服務的存取權限為公開存取,使所有使用者都能夠存取該服務(google_cloud_run_service_iam_member.public_access):

  • role: 設定權限角色為"roles/run.invoker",允許使用者進行Cloud Run服務的存取。

  • member: 設定成員為"allUsers",表示所有人都有存取權限。

輸出URL用於輸出Cloud Run服務的URL (output cloud_run_url ):

  • 該URL是由google_cloud_run_service.cloud_run_service中的服務狀態(status)提供的,並且可以在後續的使用中參考。

總之,這段 Terraform 程式碼創建一個Cloud Run服務,並配置它的容器、存取權限以及提供服務的URL。可以輕鬆部署Web應用程式或API,並讓所有使用者都能夠存取該服務,實現自動化地在 Google Cloud Platform 上創建和配置 Cloud Run。

Google Cloud Run服務設定

設定Cloud Run服務的存取權限為公開存取

執行terraform部署

到專案目錄執行初始化計畫

terraform init
# or
tf init

確認部署計畫內容

terraform plan -out plan.out
# or
tfp

觀看部署計畫 terraform plan -out plan.out

最後執行 terraform apply -auto-approve來部署對應的資源到雲端架構上,就可以得到下列的結果。

terraform apply -auto-approve
# or
tfdp

部署雲端架構 terraform apply -auto-approve

GCP 無伺服器服務 — Cloud Run

測試部署的 Cloud Run

創建完畢,並看到Cloud Run後,可以點選查看函數的詳細資料。

Cloud Run 指標

Cloud Run 修訂版本

接下來可以嘗試觸發服務,點選觸發條件中的網址,就可以轉發到服務。例如下面的一長串網址,分別會是cloud run名稱組成的url。

Cloud Run 觸發條件 url

Cloud Run 的 nginx server

也可以複製剛剛terraform部署後產生的ouput網址,貼到瀏覽器上也可以看到回傳的內容。

terraform部署後產生的output網址

Cloud Run 的nginx server

Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。

  1. 打開終端機中的 .bashrc or .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"

3. 總結 Summary

  1. Terraform 雲端資源實作:介紹如何使用Terraform自動化地創建Cloud Run的過程。主要步驟包括:
  • 初始化 Terraform: 使用 terraform init 初始化 Terraform 項目,確保環境正確設定。
  • 設定變數: 定義所需變數,如 GCP 專案 ID、區域和服務名稱,以便稍後在 Terraform 中使用。
  • 建立 Cloud Run 服務定義: 定義 Cloud Run 服務的特性,包括服務名稱、容器映像檔、通訊埠設定和流量路由。
  • 設定存取權限: 根據需求,配置 Cloud Run 服務的存取權限,確保只有授權的使用者能夠存取服務。
  • 生成計劃執行部署: 使用 terraform plan 生成部署計劃,並使用 terraform apply 部署 Cloud Run 服務及其相關資源到 Google Cloud Platform。
  1. 部署並測試Cloud Run:提供了執行Terraform部署的指令,以及我們可以使用HTTP請求觸發Cloud Run,並查看Cloud Run 的 nginx server 回應內容。

4. 相關連結

  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 24 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 無伺服器服務 Cloud Run
下一篇
Day 26 — Terraform/GCP實戰:使用 GCP Console 創建 GCP 運算服務 Kubernetes GKE
系列文
Terraform 從零開始 - 實戰Lab打造GCP雲端自動化架構31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言