![GCP 分析服務 — 使用Terraform創建消息隊列PubSub](https://cdn-images-1.medium.com/max/800/1*ZA9eXiUS2dhIv8ceJqNqYA.png)
1. GCP 分析服務 — 消息隊列PubSub的主要功能和用途
Google Cloud Pub/Sub 是 Google Cloud Platform(GCP)提供的訊息傳遞服務,用於在分散式系統之間可靠地傳遞和傳播資料。它提供了一種可擴展的、高可用性的訊息佇列和發佈-訂閱模型,可用於各種不同的用途。以下是 Google Cloud Pub/Sub 的主要功能和用途:
- 高效的訊息傳遞機制:創建基於事件驅動架構的應用程式,並協助在不同應用程式之間進行大量資料訊息的傳遞。
- 可靠性:PubSub 提供快速且可靠的消息傳遞機制,保證訊息能夠安全地傳遞到目標應用程式。
- 可擴展性:PubSub 可以擴展到支援百萬級別的同時連線和消息傳遞,而且能夠自動擴展以處理高峰負載。
- 彈性的訊息路由:PubSub 提供豐富的路由規則,可以根據條件將訊息路由到指定的應用程式。
- 安全性:PubSub 提供多種安全功能,如存取控制和 SSL 加密,可以保護您的敏感資料。
2. GCP 分析服務 — 消息隊列PubSub的使用情境
Google Cloud Platform 的消息隊列PubSub可在多種場景下使用,以下是一些常見的使用情境:
- 整合應用程式:PubSub 可以協助應用程式之間進行訊息傳遞,例如通知、事件等等,實現系統之間的整合和協作。
- 資料處理:PubSub 可以作為資料處理的重要組成部分,可以將大量的資料訊息傳遞到目標系統進行處理和分析。
- 非同步處理:PubSub 可以實現非同步處理,例如將長時間運行的工作提交到隊列中,讓其他應用程式去處理。
3. GCP 分析服務 — 使用Terraform創建消息隊列PubSub
在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建消息隊列PubSub。我們將依次進行以下步驟:
- 創建一個pubsub:創建一個 Pub/Sub 主題
- 創建一個訂閱者subscription:創建一個 Pub/Sub 訂閱者,並將其與主題關聯
- 將訊息上傳public到pubsub:使用 GCP 的 Pub/Sub 的 GCP console來發佈一條消息到剛剛創建的主題
- 查看是否可以收到訊息:使用 GCP 的 Pub/Sub 的 GCP console來收發剛剛的消息
- 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)。讓我們逐一解釋這段代碼的意義:
resource "google_pubsub_topic" "hello_topic"
:這段程式碼定義了一個名為 “hello_topic” 的 Pub/Sub 主題資源。這將創建一個新的 Pub/Sub 主題,var.topic_name
是一個變數,表示主題的名稱。resource "google_pubsub_subscription" "hello_subscription"
:這段程式碼定義了一個名為 “hello_subscription” 的 Pub/Sub 訂閱者資源。這將創建一個新的 Pub/Sub 訂閱者,var.subscription_name
是一個變數,表示訂閱者的名稱。同時,topic
參數指定了該訂閱者所訂閱的主題,這裡使用了google_pubsub_topic.hello_topic.id
來獲取主題的 ID。resource "google_pubsub_topic_iam_member" "hello_topic_iam"
:這段程式碼創建了一個 Pub/Sub 主題的 IAM 成員。它指定了將allUsers
設定為具有 “roles/pubsub.publisher” 角色的成員,這意味著任何使用者都可以向這個主題發布消息。這個步驟可以用於設定公開發佈消息的權限。
這段程式碼通過 Terraform 配置定義了創建 Pub/Sub 服務中的主題、訂閱者以及與主題相關的 IAM 權限。
接下來的部分是代碼的輸出部分,方便在部署完成後檢視主題和訂閱者的相關資訊。具體來說:
output "topic_url"
和output "subscription_url"
:這兩個程式碼片段定義了兩個輸出變數,分別是主題的 URL 和訂閱者的 URL。這些變數將在執行 Terraform 時被記錄下來,以便在完成部署後,您可以輕鬆地找到創建的主題和訂閱者的相關資訊。
最後執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
![](https://cdn-images-1.medium.com/max/800/1*XRY1TTNbrA-8HehZFm8QSg.png)
![](https://cdn-images-1.medium.com/max/800/1*_drBiTRBbFGHggfB32j3rQ.png)
subscription
訂閱者Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。
- 打開終端機中的 .bashrc or .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"
完成部署後,進行pubsub的測試:
- 發布訊息:在主題中,點選發布訊息helloworld。
- 訂閱項目:選擇我們的訂閱項目(pubsub-sub-tf-ch4–8-3),並點選提取訊息。
- 確認訊息:確認看到訊息內文hello world。
![pubsub 發布訊息helloworld](https://cdn-images-1.medium.com/max/800/1*Io6lORzwNdh_4TPBjUtxlw.png)
![pubsub 訂閱項目(pubsub-sub-tf-ch4–8–3)](https://cdn-images-1.medium.com/max/800/1*kuPuzal5NT9bkyOfkq7YmQ.png)
![pubsub 訊息內文hello world](https://cdn-images-1.medium.com/max/800/1*3uYNizWwOdjKIR3VQCd51w.png)
課程連結
如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 Udemy 課程,進一步深入學習 Terraform 和 GCP 的知識:
![訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程](https://cdn-images-1.medium.com/max/800/1*1e6Kj9yUjx6itnU2bEg_gw.png)