blog post

Terraform 從零開始 (6) — GCP 分析服務 — 使用Terraform創建消息隊列PubSub

GCP 分析服務 — 使用Terraform創建消息隊列PubSub
GCP 分析服務 — 使用Terraform創建消息隊列PubSub

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

1. GCP 分析服務 — 消息隊列PubSub的主要功能和用途

Google Cloud Pub/Sub 是 Google Cloud Platform(GCP)提供的訊息傳遞服務,用於在分散式系統之間可靠地傳遞和傳播資料。它提供了一種可擴展的、高可用性的訊息佇列和發佈-訂閱模型,可用於各種不同的用途。以下是 Google Cloud Pub/Sub 的主要功能和用途:

  1. 高效的訊息傳遞機制:創建基於事件驅動架構的應用程式,並協助在不同應用程式之間進行大量資料訊息的傳遞。
  2. 可靠性:PubSub 提供快速且可靠的消息傳遞機制,保證訊息能夠安全地傳遞到目標應用程式。
  3. 可擴展性:PubSub 可以擴展到支援百萬級別的同時連線和消息傳遞,而且能夠自動擴展以處理高峰負載。
  4. 彈性的訊息路由:PubSub 提供豐富的路由規則,可以根據條件將訊息路由到指定的應用程式。
  5. 安全性:PubSub 提供多種安全功能,如存取控制和 SSL 加密,可以保護您的敏感資料。

2. GCP 分析服務 — 消息隊列PubSub的使用情境

Google Cloud Platform 的消息隊列PubSub可在多種場景下使用,以下是一些常見的使用情境:

  1. 整合應用程式:PubSub 可以協助應用程式之間進行訊息傳遞,例如通知、事件等等,實現系統之間的整合和協作。
  2. 資料處理:PubSub 可以作為資料處理的重要組成部分,可以將大量的資料訊息傳遞到目標系統進行處理和分析。
  3. 非同步處理:PubSub 可以實現非同步處理,例如將長時間運行的工作提交到隊列中,讓其他應用程式去處理。

3. GCP 分析服務 — 使用Terraform創建消息隊列PubSub

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

  1. 創建一個pubsub:創建一個 Pub/Sub 主題
  2. 創建一個訂閱者subscription:創建一個 Pub/Sub 訂閱者,並將其與主題關聯
  3. 將訊息上傳public到pubsub:使用 GCP 的 Pub/Sub 的 GCP console來發佈一條消息到剛剛創建的主題
  4. 查看是否可以收到訊息:使用 GCP 的 Pub/Sub 的 GCP console來收發剛剛的消息
  5. Terraform PubSub 連結:可以到github參考對應的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 "topic_name" {
  type    = string
  default = "pubsub-topic-tf-ch4-8-3"
}

variable "subscription_name" {
  type    = string
  default = "pubsub-sub-tf-ch4-8-3"
}

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

  • variable "GCP_PROJECT":這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 “terraform101-384507″,但可以在使用時指定不同的值。
  • variable "GCP_REGION":這是定義網路服務所在位置(地區)的變數。
  • variable "topic_name":這是用於定義 Google Cloud pubsub topic 主題名稱的變數。
  • variable "subsciption_name":這是用於定義 Google Cloud pubsub subsciption 訂閱名稱的變數。

2-main.tf

##################################################################################
# RESOURCE
##################################################################################
# 創建 PubSub 主題和訂閱
resource "google_pubsub_topic" "hello_topic" {
  name = var.topic_name
}

resource "google_pubsub_subscription" "hello_subscription" {
  name  = var.subscription_name
  topic = google_pubsub_topic.hello_topic.id
}

# 創建 PubSub 消息
resource "google_pubsub_topic_iam_member" "hello_topic_iam" {
  topic  = google_pubsub_topic.hello_topic.name
  role   = "roles/pubsub.publisher"
  member = "allUsers"
}


# 輸出主題和訂閱的網址
output "topic_url" {
  value = google_pubsub_topic.hello_topic.id
}

output "subscription_url" {
  value = google_pubsub_subscription.hello_subscription.id
}
  • 這段 Terraform 程式碼的目的是在 Google Cloud Platform(GCP)上使用 Terraform 創建一個 Pub/Sub(消息隊列)服務,並創建一個主題(Topic)以及與該主題相關聯的訂閱者(Subscription)。讓我們逐一解釋這段代碼的意義:
  1. resource "google_pubsub_topic" "hello_topic":這段程式碼定義了一個名為 “hello_topic” 的 Pub/Sub 主題資源。這將創建一個新的 Pub/Sub 主題,var.topic_name 是一個變數,表示主題的名稱。
  2. resource "google_pubsub_subscription" "hello_subscription":這段程式碼定義了一個名為 “hello_subscription” 的 Pub/Sub 訂閱者資源。這將創建一個新的 Pub/Sub 訂閱者,var.subscription_name 是一個變數,表示訂閱者的名稱。同時,topic 參數指定了該訂閱者所訂閱的主題,這裡使用了 google_pubsub_topic.hello_topic.id 來獲取主題的 ID。
  3. resource "google_pubsub_topic_iam_member" "hello_topic_iam":這段程式碼創建了一個 Pub/Sub 主題的 IAM 成員。它指定了將 allUsers 設定為具有 “roles/pubsub.publisher” 角色的成員,這意味著任何使用者都可以向這個主題發布消息。這個步驟可以用於設定公開發佈消息的權限。

這段程式碼通過 Terraform 配置定義了創建 Pub/Sub 服務中的主題、訂閱者以及與主題相關的 IAM 權限。

接下來的部分是代碼的輸出部分,方便在部署完成後檢視主題和訂閱者的相關資訊。具體來說:

  1. output "topic_url"output "subscription_url":這兩個程式碼片段定義了兩個輸出變數,分別是主題的 URL 和訂閱者的 URL。這些變數將在執行 Terraform 時被記錄下來,以便在完成部署後,您可以輕鬆地找到創建的主題和訂閱者的相關資訊。

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

terraform apply -auto-approve
GCP 分析服務 — PubSub Topic主題
GCP 分析服務 — PubSub subscription 訂閱者

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"

完成部署後,進行pubsub的測試:

  1. 發布訊息:在主題中,點選發布訊息helloworld。
  2. 訂閱項目:選擇我們的訂閱項目(pubsub-sub-tf-ch4–8-3),並點選提取訊息。
  3. 確認訊息:確認看到訊息內文hello world。
pubsub 發布訊息helloworld
pubsub 發布訊息helloworld
pubsub 訂閱項目(pubsub-sub-tf-ch4–8–3)
pubsub 訂閱項目(pubsub-sub-tf-ch4–8–3)
pubsub 訊息內文hello world
pubsub 訊息內文hello world

課程連結

如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 Udemy 課程,進一步深入學習 Terraform 和 GCP 的知識:

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

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

相關連結

  1. 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
  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
  3. GCP 分析服務 — 消息隊列 Pubsub

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *