本文說明如何建立具有單一訊息轉換 (SMT) 的 Pub/Sub 主題。
主題 SMT 可直接在 Pub/Sub 中輕量修改訊息資料和屬性。這項功能可讓您在訊息發布至主題前,先清理、篩選資料或轉換格式。
如要使用 SMT 建立主題,可以使用 Google Cloud 控制台、Google Cloud CLI、用戶端程式庫或 Pub/Sub API。
事前準備
瞭解 Pub/Sub 服務和相關術語。
瞭解 SMT。
必要角色和權限
如要取得建立含有 SMT 的主題所需的權限,請要求管理員在專案中授予您「Pub/Sub 編輯者 」(roles/pubsub.editor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備使用 SMT 建立主題所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要使用 SMT 建立主題,必須具備下列權限:
-
授予專案的主題建立權限:
pubsub.topics.create
您可以在專案層級和個別資源層級設定存取權控管。
使用 SMT 建立主題
使用 SMT 建立主題前,請先參閱主題屬性的說明文件。
如要建立具有一或多個 SMT 的 Pub/Sub,請執行下列步驟。
控制台
前往 Google Cloud 控制台的 Pub/Sub「主題」頁面。
按一下「建立主題」。
在「主題 ID」欄位中,輸入主題的 ID。如要進一步瞭解如何命名主題,請參閱命名規範。
在「轉換」下方,按一下「新增轉換」。
輸入函式名稱。例如:
redactSSN。如不想立即啟用 SMT,請選取「停用轉換」。選取這個選項後,系統會使用主題建立 SMT,但不會對內送郵件執行 SMT。建立主題後,您可以編輯主題來啟用 SMT。
在文字區域中輸入 SMT 的代碼。例如:
function redactSSN(message, metadata) { const data = JSON.parse(message.data); delete data['ssn']; message.data = JSON.stringify(data); return message; }選用。如要驗證 SMT,請按一下「驗證」。如果 SMT 有效,系統會顯示
"Validation passed"訊息。否則會顯示錯誤訊息。如要新增其他轉換作業,請按一下「新增轉換作業」,然後重複上述步驟。
如要依特定順序排列 SMT,請按一下「上移」或「下移」。如要移除 SMT,請按一下「刪除」。
選用。如要測試範例訊息的 SMT,請按照下列步驟操作:
按一下「測試轉換」。
在「測試轉換」視窗中,選取要測試的函式。
在「輸入訊息」視窗中輸入範例訊息。
如要為訊息新增屬性,請按一下「新增屬性」,然後輸入屬性的鍵和值。你可以新增多個屬性。
按一下「測試」。將 SMT 套用至訊息的結果會顯示在「輸出訊息」下方。
如要關閉「測試轉換」視窗,請按一下「關閉」。
如果您建立多個 SMT,可以按照下列方式測試整個轉換序列:
- 按照先前的步驟,測試序列中的第一個 SMT。
- 選取下一個 SMT。輸入訊息會預先填入先前測試的輸出訊息。
- 繼續依序測試 SMT,確保整個序列運作正常。
如要建立主題,請按一下「建立」。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
建立定義一或多個 SMT 的 YAML 或 JSON 檔案。如果您有多個 SMT,系統會按照您列出的順序對郵件執行這些 SMT。
以下是 YAML 轉換檔案範例:
- javascriptUdf: code: > function redactSSN(message, metadata) { const data = JSON.parse(message.data); delete data['ssn']; message.data = JSON.stringify(data); return message; } functionName: redactSSN選用。如要驗證 SMT,請執行
gcloud pubsub message-transforms validate指令:gcloud pubsub message-transforms validate \ --message-transform-file=TRANSFORM_FILE更改下列內容:
- TRANSFORM_FILE:定義單一 SMT 的 YAML 或 JSON 檔案路徑。如要建立多個 SMT,必須逐一驗證。
選用。如要測試一或多個 SMT 是否能處理 Pub/Sub 訊息範例,請執行
gcloud pubsub message-transforms test指令:gcloud pubsub message-transforms test \ --message-transforms-file=TRANSFORMS_FILE \ --message=MESSAGE \ --attribute=ATTRIBUTES更改下列內容:
- TRANSFORMS_FILE:定義一或多個 SMT 的 YAML 或 JSON 檔案路徑。
- MESSAGE:範例訊息內文。
- ATTRIBUTES:選用。以半形逗號分隔的訊息屬性清單。每個屬性都是鍵/值組合,格式為
KEY="VALUE"。
這項指令會依序執行 SMT,並將每個 SMT 的輸出內容做為下一個 SMT 的輸入內容。這個指令會輸出每個步驟的結果。
如要建立主題,請執行
gcloud pubsub topics create指令:gcloud pubsub topics create TOPIC_ID \ --message-transforms-file=TRANSFORMS_FILE更改下列內容:
- TOPIC_ID:要建立的主題 ID 或名稱。如需主題命名規範,請參閱「資源名稱」。主題名稱無法變更。
- TRANSFORMS_FILE:定義一或多個 SMT 的 YAML 或 JSON 檔案路徑。
Java
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Java 設定操作說明進行操作。詳情請參閱 Pub/Sub Java API 參考說明文件。
Python
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Python 設定操作說明來進行。詳情請參閱 Pub/Sub Python API 參考說明文件。
Go
下列範例使用 Go Pub/Sub 用戶端程式庫的主要版本 (v2)。如果您仍在使用第 1 版程式庫,請參閱第 2 版遷移指南。如要查看第 1 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的操作說明設定 Go 環境。詳情請參閱 Pub/Sub Go API 參考說明文件。