訂閱屬性

Pub/Sub 訂閱項目屬性是訂閱項目的特徵。您可以在建立或更新訂閱項目時設定訂閱項目屬性。

本文說明可為訂閱項目設定的不同訂閱屬性。

事前準備

常見的訂閱屬性

建立訂閱方案時,您必須指定多個選項來設定訂閱方案。部分屬性適用於所有類型的訂閱項目,我們將在後續章節中討論。

訊息保留時間

「訊息保留時間」選項可指定 Pub/Sub 在發布訊息後保留訊息的時間長度。超過訊息保留時間後,Pub/Sub 可能會捨棄訊息,與訊息的確認狀態無關。如要在訊息保留時間內保留已確認的訊息,請參閱「重播與捨棄訊息」。

「訊息保留時間」選項的值如下:

  • 預設值 = 7 天
  • 最小值 = 10 分鐘
  • 最大值 = 31 天

未確認的訊息可能是因為訂閱項目閒置、需要備份或處理速度緩慢所致。如果能在 24 小時內處理訊息,就不會產生額外費用。如要避免產生新費用,請按照下列方式管理這些情況:

  • 閒置訂閱項目刪除閒置的訂閱項目,以免產生訂閱訊息保留費用。

  • 備份儲存空間。如果使用訂閱保留功能做為備份儲存空間,可以改用其他儲存空間選項,例如主題訊息保留或保留已確認訊息。主題訊息保留功能只會在主題層級儲存訊息一次,所有訂閱項目都能在需要時取用這些訊息。

  • 處理作業延遲。盡可能增加訂閱者,以便在一天內處理訊息。

保留已確認的訊息

如果您指定「訊息保留時間」,也可以指定是否要保留已確認的訊息。

您可以透過「保留已確認的訊息」選項,在指定的訊息保留時間內保留已確認的訊息。這會增加訊息儲存費用。詳情請參閱儲存空間費用

有效期限

你可以使用「到期期限」選項延長訂閱方案的到期期限。

如果訂閱項目沒有任何訂閱者活動,或訂閱項目屬性沒有任何變更,就會過期。如果 Pub/Sub 偵測到訂閱者活動,或是您更新任何訂閱屬性,訂閱刪除時鐘就會重新啟動。訂閱者活動包括公開連線、進行中的提取作業或完成的推送作業。

如果指定到期時間,該值至少須等於「訊息保留時間」選項中指定的訊息保留時間。

「到期時間」選項的值如下:

  • 預設值 = 31 天
  • 最小值 = 1 天

為避免訂閱項目過期,請將到期時間範圍設為 never expire

確認期限

「確認期限」選項會指定初始期限,如果未在期限內確認訊息,系統就會再次傳送。您可以傳送後續的 ModifyAckDeadline 要求,逐一延長訊息的確認期限。

「確認期限」選項的值如下:

  • 預設值 = 10 秒
  • 最小值 = 10 秒
  • 值不得超過 600 秒

在某些情況下,Pub/Sub 用戶端程式庫可以控制傳送速率,並動態修改確認期限。這麼做可能會導致系統在您設定的確認期限前,重新傳送訊息。如要覆寫此行為,請使用 minDurationPerAckExtensionmaxDurationPerAckExtension。如要進一步瞭解如何使用這些值,請參閱用戶端程式庫中的「只傳送一次」傳送支援

單一訊息轉換 (SMT)

SMT 可直接在 Pub/Sub 中輕量修改訊息屬性和資料。這項功能可在訊息傳送至訂閱端之前,進行資料清理、篩選或格式轉換。

詳情請參閱「SMT 總覽」和「使用 SMT 建立訂閱項目」。

訂閱項目篩選器

使用「訂閱項目篩選器」選項,指定含有篩選運算式的字串。如果訂閱項目設有篩選器,系統只會傳送符合篩選條件的訊息。Pub/Sub 服務會自動確認不符合篩選條件的訊息。

  • 您可以依訊息屬性篩選訊息,但無法依訊息中的資料篩選。

  • 如未指定,訂閱項目不會篩選訊息,訂閱者會收到所有訊息。

  • 篩選器套用後即無法變更或移除。

如果訂閱項目設有篩選條件,當您收到訊息時,Pub/Sub 會自動確認訊息,您不必支付這些訊息的輸出費用。您需要為這些訊息支付訊息傳送費用和搜尋相關儲存空間費用。

詳情請參閱「篩選訂閱項目中的訊息」。

訊息排序

如果訂閱項目啟用訊息排序功能,訂閱端就會按照服務接收訊息的順序,接收在相同區域發布且排序鍵相同的訊息。

使用依序傳送功能時,系統會先處理較早訊息的確認訊息,再處理後續訊息的確認訊息。

發布者必須傳送含有排序鍵的訊息,Pub/Sub 才能依序傳送訊息

如果未設定,即使訊息有排序鍵,Pub/Sub 也可能不會依序傳送訊息。

無效信件主題

如果訊息在經過設定的傳送嘗試次數後仍無法傳送,或是訂閱者無法確認訊息,您可以設定無效信件主題,將這些訊息重新發布至該主題。

如果設定無效信件主題,也可以指定傳送嘗試次數上限。無效信件主題的傳送嘗試次數上限值如下:

  • 預設值 = 5 次嘗試傳送
  • 最小值 = 5 次傳送嘗試
  • 最大值 = 100 次傳送嘗試

如果無法傳送訊息的主題與訂閱項目位於不同專案,您也必須指定無法傳送訊息的主題專案 ID。

詳情請參閱「轉送至無法傳送訊息的主題」。

重試政策

如果確認期限到期,或訂閱端傳回否定確認,Pub/Sub 可以再次傳送訊息。這項重試遞送作業稱為訂閱項目的「重試政策」

根據預設,訂閱項目的重試政策會設為「立即重試」。如果選擇這個選項,當確認期限到期或訂閱端傳回否定確認時,Pub/Sub 就會重新傳送訊息。

您也可以將值設為「在指數輪詢延遲時間過後重試」。 在這種情況下,您必須指定輪詢時間上限和下限。

以下是設定輪詢持續時間上限和下限值的幾項準則:

  • 如果設定輪詢持續時間上限,輪詢持續時間下限的預設值為 10 秒。

  • 如果設定輪詢持續時間下限,輪詢持續時間上限的預設值為 600 秒。

  • 您可以指定的最長輪詢時間為 600 秒。

重試政策和批次訊息

如果訊息位於批次中,發生下列任一情況時,Pub/Sub 會啟動指數輪詢:

  • 訂閱者會針對批次中的每則訊息傳送否定確認。

  • 確認期限已過。

重試政策和推送訂閱

如果您透過推送訂閱項目接收訊息,Pub/Sub 可能會在推送退避後重新傳送訊息,而不是指數退避時間。如果推送輪詢時間長於指數輪詢時間,Pub/Sub 會在推送輪詢時間過後,重新傳送未確認的訊息。

提取訂閱項目屬性

設定提取訂閱項目時,您可以指定下列屬性。

僅傳送一次

僅傳送一次。如果設定此選項,Pub/Sub 會履行僅傳送一次的傳送保證。如未指定,訂閱項目會支援每則訊息的「至少一次」傳送作業。

推送訂閱屬性

設定推送訂閱項目時,您可以指定下列屬性。

端點

端點網址 (必填)。可公開存取的 HTTPS 位址。推送端點的伺服器必須具備由憑證授權單位簽署的有效 SSL 憑證。Pub/Sub 服務會從 Pub/Sub 服務儲存訊息的 Trusted Cloud 相同區域,將訊息傳送至推送端點。Pub/Sub 服務會盡可能傳送來自相同 Trusted Cloud 區域的訊息。

  • 如果訂閱者使用防火牆,就無法接收推送要求。如要接收推送要求,請務必關閉防火牆,並驗證要求中使用的 JSON Web Token (JWT)。如果訂閱者有防火牆,您可能會收到 403 permission denied 錯誤訊息。

  • Pub/Sub 不再要求推送訂閱項目網址網域提供擁有權證明。如果網域收到來自 Pub/Sub 的非預期 POST 要求,可以回報疑似濫用行為

驗證

啟用驗證功能。啟用後,Pub/Sub 傳送至推送端點的訊息會包含授權標頭,讓端點驗證要求。與訂閱項目一起託管在相同專案中的 App Engine 標準應用程式和 Cloud Run 函式端點,都可以使用自動驗證和授權機制。

經過驗證的推送訂閱項目的驗證設定包含使用者管理的服務帳戶,以及在 createpatchModifyPushConfig 呼叫中指定的對象參數。您也必須將特定角色授予服務帳戶,詳情請參閱下一節。

  • 目標對象。Webhook 用來驗證這個特定符記目標對象的不區分大小寫字串。

  • 服務帳戶。Pub/Sub 會自動為您建立服務帳戶,格式為 service-{PROJECT_NUMBER}@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com

啟用驗證功能的事前準備

使用者管理的服務帳戶是與推送訂閱項目相關聯的服務帳戶。這個帳戶會做為產生的 JSON Web Token (JWT) 的 email 聲明。服務帳戶必須符合下列規定:

  • 這個使用者代管的服務帳戶必須與推送訂閱項目位於同一專案。

  • 建立或修改推送訂閱項目的主體必須對使用者管理的服務帳戶擁有 iam.serviceAccounts.actAs 權限,才能將服務帳戶附加至推送訂閱項目。詳情請參閱「將服務帳戶附加至資源」。

  • 必要權限:必須將 iam.serviceAccounts.getOpenIdToken 權限 (包含在 roles/iam.serviceAccountTokenCreator 角色中) 授予這個服務帳戶,Pub/Sub 才能為指定服務帳戶建立 JWT 權杖,以驗證推送要求。

酬載解除包裝

「啟用酬載解除包裝」選項會從 Pub/Sub 訊息中移除所有訊息中繼資料,只保留訊息資料。透過酬載解包,訊息資料會直接以 HTTP 主體形式傳送。

您也可以啟用「寫入中繼資料」選項。「寫入中繼資料」選項會將先前移除的訊息中繼資料新增回要求標頭。

BigQuery 屬性

選取「寫入 BigQuery」做為訂閱項目傳送類型時,可以指定下列其他屬性。

使用主題結構定義

這個選項可讓 Pub/Sub 使用訂閱項目所連結的 Pub/Sub 主題結構定義。此外,Pub/Sub 會將訊息中的欄位寫入 BigQuery 資料表中的對應欄。

使用這個選項時,請務必確認是否符合下列額外規定:

  • 主題結構定義和 BigQuery 結構定義中的欄位必須具有相同名稱,且類型必須彼此相容。

  • 主題結構定義中的任何選填欄位,在 BigQuery 結構定義中也必須是選填欄位。

  • 主題結構定義中的必填欄位不一定要是 BigQuery 結構定義中的必填欄位。

  • 如果主題結構定義中沒有 BigQuery 欄位,這些 BigQuery 欄位就必須處於 NULLABLE 模式。

  • 如果主題結構定義有 BigQuery 結構定義中沒有的額外欄位,且這些欄位可以捨棄,請選取「捨棄不明欄位」選項。

  • 您只能選取其中一個訂閱屬性:「使用主題結構定義」或「使用資料表結構定義」

如未選取「使用主題結構定義」或「使用資料表結構定義」選項,請確認 BigQuery 資料表有名為「data」的資料欄,且類型為 dataBYTESSTRINGJSON。Pub/Sub 會將訊息寫入這個 BigQuery 資料欄。

您可能不會立即看到 Pub/Sub 主題結構定義或 BigQuery 資料表結構定義的變更,對寫入 BigQuery 資料表的訊息生效。舉例來說,如果啟用「捨棄不明欄位」選項,且 Pub/Sub 結構定義中有某個欄位,但 BigQuery 結構定義中沒有,即使將該欄位新增至 BigQuery 結構定義,寫入 BigQuery 資料表的訊息可能仍不會包含該欄位。最終,結構定義會同步處理,後續訊息也會包含該欄位。

為 BigQuery 訂閱項目使用「使用主題結構定義」選項時,您也可以運用 BigQuery 變更資料擷取 (CDC) 功能。CDC 會處理現有資料列的變更並套用,藉此更新 BigQuery 資料表。

如要進一步瞭解這項功能,請參閱「使用變更資料擷取功能串流傳輸資料表更新」。

如要瞭解如何搭配 BigQuery 訂閱項目使用這項功能,請參閱「BigQuery 變更資料擷取」。

使用資料表結構定義

這個選項可讓 Pub/Sub 使用 BigQuery 資料表的結構定義,將 JSON 訊息的欄位寫入對應的資料欄。使用這個選項時,請記得檢查下列額外需求:

  • BigQuery 資料表中的每個資料欄名稱只能包含英文字母 (a-z、A-Z)、數字 (0-9) 或底線 (_)。

  • 發布的訊息必須採用 JSON 格式。

  • 系統支援下列 JSON 轉換:

    JSON 類型 BigQuery 資料類型
    string NUMERICBIGNUMERICDATETIMEDATETIMETIMESTAMP
    number NUMERICBIGNUMERICDATETIMEDATETIMETIMESTAMP
    • 使用 numberDATEDATETIMETIMETIMESTAMP 轉換時,數字必須符合支援的表示法
    • 使用 numberNUMERICBIGNUMERIC 轉換時,值的精確度和範圍會受限於 IEEE 754 浮點運算標準接受的範圍。如需高精確度或更廣泛的值範圍,請改用 string 轉換為 NUMERICBIGNUMERIC
    • 使用 string 轉換為 NUMERICBIGNUMERIC 時,Pub/Sub 會假設字串是使用者可解讀的數字 (例如 "123.124")。如果無法將字串處理為使用者可解讀的數字,Pub/Sub 會將字串視為以 BigDecimalByteStringEncoder 編碼的位元組。
  • 如果訂閱項目的主題有相關聯的結構定義,則訊息編碼屬性必須設為 JSON

  • 如果訊息中沒有 BigQuery 欄位,這些 BigQuery 欄位就必須處於 NULLABLE 模式。

  • 如果訊息含有 BigQuery 結構定義中沒有的額外欄位,且這些欄位可以捨棄,請選取「捨棄不明欄位」選項。

  • 您只能選取其中一個訂閱屬性:「使用主題結構定義」或「使用資料表結構定義」

如未選取「使用主題結構定義」或「使用資料表結構定義」選項,請確認 BigQuery 資料表有名為「data」的資料欄,且類型為 dataBYTESSTRINGJSON。Pub/Sub 會將訊息寫入這個 BigQuery 資料欄。

您可能不會立即看到寫入 BigQuery 資料表的訊息生效,舉例來說,如果啟用「捨棄不明欄位」選項,且訊息中存在某個欄位,但 BigQuery 結構定義中沒有該欄位,即使將該欄位新增至 BigQuery 結構定義,寫入 BigQuery 資料表的訊息可能仍不包含該欄位。最終,結構定義會同步處理,後續訊息也會包含該欄位。

為 BigQuery 訂閱項目使用「使用資料表結構定義」選項時,您也可以運用 BigQuery 變更資料擷取 (CDC) 功能。CDC 會處理現有資料列的變更並套用,藉此更新 BigQuery 資料表。

如要進一步瞭解這項功能,請參閱「使用變更資料擷取功能串流傳輸資料表更新」。

如要瞭解如何搭配 BigQuery 訂閱項目使用這項功能,請參閱「BigQuery 變更資料擷取」。

捨棄不明欄位

這個選項會搭配「使用主題結構定義」或「使用資料表結構定義」選項使用。啟用這個選項後,Pub/Sub 會捨棄主題結構定義或訊息中現有但不在 BigQuery 結構定義中的任何欄位。將訊息寫入 BigQuery 資料表時,系統會捨棄不屬於 BigQuery 結構定義的欄位。

如未設定「捨棄不明欄位」,系統不會將含有額外欄位的訊息寫入 BigQuery,並會將該則訊息保留在訂閱項目的待處理工作中,除非您設定無效信件主題

「捨棄不明欄位」設定不會影響 Pub/Sub 主題結構定義或 BigQuery 資料表結構定義中未定義的欄位。在這種情況下,系統會將有效的 Pub/Sub 訊息傳送至訂閱項目。不過,由於 BigQuery 沒有為這些額外欄位定義資料欄,因此在 BigQuery 寫入程序中,這些欄位會遭到捨棄。如要避免這種情況,請確保 Pub/Sub 訊息中包含的所有欄位,也包含在 BigQuery 資料表結構定義中。

額外欄位的行為也可能取決於使用的特定結構定義類型 (Avro、通訊協定緩衝區) 和編碼 (JSON、二進位)。如要瞭解這些因素如何影響額外欄位的處理方式,請參閱特定架構類型和編碼的說明文件。

寫入中繼資料

這個選項可讓 Pub/Sub 將每則訊息的中繼資料寫入 BigQuery 資料表中的其他資料欄。如未啟用,中繼資料就不會寫入 BigQuery 資料表。

如果選取「寫入中繼資料」選項,請確認 BigQuery 資料表具有下表所述的欄位。

如未選取「寫入中繼資料」選項,目的地 BigQuery 資料表就只需要 data 欄位,除非 use_topic_schema 為 true。如果同時選取「寫入中繼資料」和「使用主題結構定義」選項,主題的結構定義就不得包含任何名稱與中繼資料參數名稱相符的欄位。這項限制包括這些蛇形命名法參數的駝峰式大小寫版本。

參數
subscription_name

STRING

訂閱方案名稱。

message_id

STRING

訊息 ID

publish_time

TIMESTAMP

發布訊息的時間。

data

BYTES、STRING 或 JSON

訊息內文。

如果目的地 BigQuery 資料表未選取「使用主題結構定義」或「使用資料表結構定義」,就必須提供 data 欄位。如果欄位類型為 JSON,則訊息內文必須是有效的 JSON。

attributes

STRING 或 JSON

包含所有訊息屬性的 JSON 物件。當中也包含 Pub/Sub 訊息的其他欄位,包括排序鍵 (如有)。

Cloud Storage 屬性

選取「寫入 Cloud Storage」做為訂閱項目傳送類型時,可以指定下列額外屬性。

值區名稱

建立 Cloud Storage 訂閱項目之前,必須先有 Cloud Storage 值區。

訊息會以批次形式傳送,並儲存在 Cloud Storage bucket 中。 單一批次或檔案會以物件形式儲存在 bucket 中。

Cloud Storage bucket 必須停用「要求者付費」功能。

如要建立 Cloud Storage bucket,請參閱「建立 bucket」。

檔案名稱前置字串、後置字串和日期時間

Cloud Storage 訂閱項目產生的輸出 Cloud Storage 檔案會以物件形式儲存在 Cloud Storage bucket 中。儲存在 Cloud Storage 值區中的物件名稱格式如下:<file-prefix><UTC-date-time>_<uuid><file-suffix>

以下清單列出檔案格式和可自訂欄位的詳細資料:

  • <file-prefix> 是自訂檔案名稱前置字元。此為選填欄位。

  • <UTC-date-time> 是可自訂的自動產生字串,會根據物件的建立時間產生。

  • <uuid> 是物件的自動生成隨機字串。

  • <file-suffix> 是自訂檔案名稱尾碼。此為選填欄位。檔案名稱後置字串不得以「/」結尾。

  • 您可以變更檔案名稱前置字串和後綴字串:

    • 舉例來說,如果檔案名稱前置字串的值為 prod_,且檔案名稱後置字串的值為 _archive,則物件名稱範例為 prod_2023-09-25T04:10:00+00:00_uN1QuE_archive

    • 如未指定檔案名稱前置字串和後置字串,儲存在 Cloud Storage bucket 中的物件名稱格式為:<UTC-date-time>_<uuid>

    • Cloud Storage 物件命名規定也適用於檔案名稱前置字串和後置字串。詳情請參閱「關於 Cloud Storage 物件」。

  • 你可以變更檔案名稱中顯示日期和時間的方式:

    • 您只能使用一次的必要日期時間比對器:年 (YYYYYY)、月 (MM)、日 (DD)、時 (hh)、分 (mm)、秒 (ss)。舉例來說,YY-YYYYMMM 無效。

    • 選用比對器 (只能使用一次):日期時間分隔符 (T) 和時區偏移量 (Z+00:00)。

    • 可多次使用的選用元素:連字號 (-)、底線 (_)、半形冒號 (:) 和斜線 (/)。

    • 舉例來說,如果檔案名稱日期時間格式的值為 YYYY-MM-DD/hh_mm_ssZ,則範例物件名稱為 prod_2023-09-25/04_10_00Z_uNiQuE_archive

    • 如果檔案名稱的日期時間格式結尾為非比對字元的字元,該字元會取代 <UTC-date-time><uuid> 之間的分隔符。舉例來說,如果檔案名稱日期時間格式的值為 YYYY-MM-DDThh_mm_ss-,則範例物件名稱為 prod_2023-09-25T04_10_00-uNiQuE_archive

檔案批次處理

透過 Cloud Storage 訂閱項目,您可以決定何時要建立新的輸出檔案,並以物件形式儲存在 Cloud Storage bucket 中。只要符合其中一項指定的批次處理條件,Pub/Sub 就會寫入輸出檔案。以下是 Cloud Storage 批次處理條件:

  • Storage 批次作業持續時間上限。這是必要設定,如果超過指定的最大時間值,Cloud Storage 訂閱項目就會寫入新的輸出檔案。如未指定值,系統會套用 5 分鐘的預設值。最長時長的適用值如下:

    • 最小值 = 1 分鐘
    • 預設值 = 5 分鐘
    • 最大值 = 10 分鐘
  • Storage 批次作業位元組數上限。這項設定為選用。如果超過指定的最大位元組值,Cloud Storage 訂閱項目就會寫入新的輸出檔案。以下是適用於位元組數上限的值:

    • 最小值 = 1 KB
    • 最大值 = 10 GiB
  • Storage 批次作業訊息數上限。這項設定為選用。如果超過指定訊息數量上限,Cloud Storage 訂閱項目就會寫入新的輸出檔案。以下是訊息數上限的適用值:

    • 最小值 = 1000

舉例來說,您可以將最長時長設為 6 分鐘,將最大位元組數設為 2 GB。如果輸出檔案在第 4 分鐘達到 2 GB 的檔案大小,Pub/Sub 就會完成前一個檔案,並開始寫入新檔案。

Cloud Storage 訂閱項目可能會同時將資料寫入 Cloud Storage 值區中的多個檔案。如果您已將訂閱項目設定為每 6 分鐘建立一個新檔案,您可能會發現系統每 6 分鐘會建立多個 Cloud Storage 檔案。

在某些情況下,Pub/Sub 可能會比檔案批次處理條件設定的時間更早開始寫入新檔案。如果訂閱項目收到的訊息大於「最大位元組」值,檔案也可能會超過該值。

檔案格式

建立 Cloud Storage 訂閱項目時,您可以指定儲存在 Cloud Storage 值區的輸出檔案格式為「文字」或「Avro」

  • 文字:訊息會以純文字格式儲存。換行字元 會將訊息與檔案中的前一則訊息分開。系統只會儲存訊息酬載,不會儲存屬性或其他中繼資料。

  • Avro:訊息會以 Apache Avro 二進位格式儲存。選取 Avro 時,可以啟用下列其他屬性:

    • 寫入中繼資料:這個選項可讓您儲存訊息中繼資料和訊息。subscription_namemessage_idpublish_timeattributes 欄位等中繼資料會寫入輸出 Avro 物件中的頂層欄位,而資料以外的所有其他訊息屬性 (例如排序鍵,如有) 則會新增為 attributes 對應中的項目。

      如果停用「寫入中繼資料」,系統只會將訊息有效負載寫入輸出 Avro 物件。以下是停用寫入中繼資料時,輸出訊息的 Avro 結構定義:

      {
        "type": "record",
        "namespace": "com.google.pubsub",
        "name": "PubsubMessage",
        "fields": [
          { "name": "data", "type": "bytes" }
        ]
      }
      

      以下是啟用「寫入中繼資料」時,輸出訊息的 Avro 結構定義:

      {
        "type": "record",
        "namespace": "com.google.pubsub",
        "name": "PubsubMessageWithMetadata",
        "fields": [
          { "name": "subscription_name", "type": "string" },
          { "name": "message_id", "type": "string"  },
          { "name": "publish_time", "type": {
              "type": "long",
              "logicalType": "timestamp-micros"
            }
          },
          { "name": "attributes", "type": { "type": "map", "values": "string" } },
          { "name": "data", "type": "bytes" }
        ]
      }
      
    • 使用主題結構定義:選取這個選項後,Pub/Sub 寫入 Avro 檔案時,會使用訂閱項目所連結的 Pub/Sub 主題結構定義

      使用這個選項時,請務必確認是否符合下列額外規定:

      • 主題結構定義必須採用 Apache Avro 格式

      • 如果同時啟用「使用主題結構定義」和「寫入中繼資料」,主題結構定義的根層級必須有 Record 物件。Pub/Sub 會展開記錄的欄位清單,納入中繼資料欄位。因此,記錄不得包含與中繼資料欄位 (subscription_namemessage_idpublish_timeattributes) 同名的欄位。

服務帳戶

您可以選擇下列方式,將訊息寫入 BigQuery 資料表或 Cloud Storage 值區:

  • 設定自訂服務帳戶,只有對服務帳戶具有 iam.serviceAccounts.actAs 權限的使用者,才能建立可寫入資料表或值區的訂閱項目。包含 iam.serviceAccounts.actAs 權限的角色範例為「服務帳戶使用者」 (roles/iam.serviceAccountUser) 角色。

  • 使用預設的 Pub/Sub 服務代理,讓任何有權在專案中建立訂閱項目的使用者,都能建立寫入資料表或值區的訂閱項目。如果您未指定自訂服務帳戶,系統會預設使用 Pub/Sub 服務代理程式。

後續步驟