本文說明如何建立 Cloud Storage 訂閱方案。您可以使用 Cloud de Confiance 控制台、Google Cloud CLI、用戶端程式庫或 Pub/Sub API 建立 Cloud Storage 訂閱項目。
事前準備
閱讀本文之前,請務必先熟悉下列項目:
- Cloud Storage 訂閱方案的運作方式。
- Cloud Storage 的運作方式,以及如何建立和管理 Cloud Storage bucket。
- 如何設定無效信件主題來處理訊息傳送失敗問題。
所需角色和權限
如要取得建立 Cloud Storage 訂閱項目所需的權限,請要求管理員授予您專案的 Pub/Sub 編輯者 (roles/pubsub.editor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備建立 Cloud Storage 訂閱項目所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
必須具備下列權限,才能建立 Cloud Storage 訂閱項目:
-
pubsub.subscriptions.create專案 -
pubsub.topics.attachSubscription這個主題
跨專案訂閱
如果您在一個專案中為另一個專案的主題建立訂閱項目,您必須對建立訂閱項目的專案具備 pubsub.subscriptions.create 權限,並對主題具備 pubsub.topics.attachSubscription 權限。
將 IAM 角色授予服務帳戶
Pub/Sub 會使用 Identity and Access Management (IAM) 服務帳戶存取 Cloud de Confiance 資源。根據預設,系統會使用 Pub/Sub 服務代理 (service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com)。
如要啟用 Pub/Sub 寫入 Cloud Storage 的功能,服務帳戶必須具備下列角色:
- Storage 物件建立者 (
roles/storage.objectCreator) - Storage 舊版值區讀取者 (
roles/storage.legacyBucketReader)
您可以為專案或 Cloud Storage bucket 授予服務帳戶權限,如下所示:
專案
前往 Cloud de Confiance 控制台的「Bucket」頁面。
選取「包含 Google 提供的角色授予項目」。
找到「Cloud Pub/Sub」服務帳戶的資料列,然後按一下 「編輯主體」。
按一下「Add another role」(新增其他角色),然後選取「Storage Object Creator」(Storage 物件建立者) 角色。針對「Storage 舊版 bucket 讀取者」角色重複執行這個步驟。
詳情請參閱「使用控制台授予 IAM 角色」一文。
Cloud Storage bucket
前往 Cloud de Confiance 控制台的「Buckets」頁面。
按一下要授予權限的 Cloud Storage bucket 名稱。
前往「Bucket details」(值區詳細資料) 頁面,點選「Permissions」(權限) 分頁標籤。
在「權限」窗格中,按一下「按照主體查看」分頁標籤。
按一下「授予存取權」。
在「New principals」(新增主體) 欄位中,輸入服務帳戶 ID,格式如下:
service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com。在「指派角色」清單中,選取「Storage 物件建立者」。
按一下 「Add another role」(新增其他角色),然後選取「Storage Legacy Bucket Reader」(Storage 舊版 bucket 讀取者)。
按一下 [儲存]。主體就會取得指定資源的角色。
使用自訂服務帳戶
將「Storage 物件建立者」和「Storage 舊版 Bucket 讀取者」角色授予 Cloud Pub/Sub 服務帳戶後,凡是有權在專案中建立訂閱項目的使用者,都能寫入 Cloud Storage bucket。如要提供更精細的權限,請改為設定使用者管理的服務帳戶。
如要設定使用者管理的服務帳戶,使其能寫入 Cloud Storage,必須具備下列權限:
使用者管理的服務帳戶必須具備「Storage 物件建立者」和「Storage 舊版值區讀取者」角色。
Cloud Pub/Sub 服務帳戶必須具備使用者自行管理服務帳戶的
iam.serviceAccounts.getAccessToken權限。建立訂閱項目的使用者必須具備使用者自行管理服務帳戶的
iam.serviceAccounts.actAs權限。
建立訂閱項目時,請將使用者管理的服務帳戶指定為訂閱項目服務帳戶。
Cloud Storage 訂閱項目屬性
Cloud Storage 訂閱方案支援所有常見的訂閱方案屬性。以下各節說明 Cloud Storage 訂閱項目專屬的屬性。
bucket 名稱
建立 Cloud Storage 訂閱項目之前,必須先建立 Cloud Storage bucket。
訊息會以批次形式傳送,並儲存在 Cloud Storage bucket 中。 單一批次或檔案會以「物件」的形式儲存在 bucket 中。
Cloud Storage bucket 必須停用「要求者付費」。
如要建立 Cloud Storage bucket,請參閱「建立 bucket」。
檔案名稱前置字串、後置字串和日期時間
Cloud Storage 訂閱項目產生的輸出 Cloud Storage 檔案,會以物件形式儲存在 Cloud Storage bucket 中。儲存在 Cloud Storage bucket 中的物件名稱格式如下:<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 物件」。
您可以變更日期和時間在檔案名稱中的顯示方式:
您只能使用一次的必要日期時間比對器:年 (
YYYY或YY)、月 (MM)、日 (DD)、時 (hh)、分 (mm)、秒 (ss)。舉例來說,YY-YYYY或MMM無效。只能使用一次的選用比對器:日期時間分隔符 (
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 批次作業持續時間上限。這是必填設定。 如果超過指定的最大持續時間值,Pub/Sub 就會寫入新的輸出檔案。時間長度是從 Pub/Sub 開始寫入新檔案,到檔案完成為止。舉例來說,如果將作業時長上限設為 5 分鐘,Pub/Sub 最慢會在開始寫入檔案的 5 分鐘後,完成檔案寫入作業。系統可能會在達到時間長度上限前建立新檔案。如未指定值,系統會套用 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 bucket 中的多個檔案。如果您已將訂閱項目設定為每 6 分鐘建立一個新檔案,您可能會發現每 6 分鐘會建立多個 Cloud Storage 檔案。
在某些情況下,Pub/Sub 可能會比檔案批次處理條件設定的時間更早開始寫入新檔案。如果訂閱項目收到的訊息大於 Max bytes 值,檔案也可能會超過該值。
檔案格式
建立 Cloud Storage 訂閱項目時,您可以指定儲存在 Cloud Storage bucket 中的輸出檔案格式為「文字」或「Avro」。
文字:訊息會以純文字格式儲存。換行字元 會將訊息與檔案中的前一則訊息分開。系統只會儲存訊息酬載,不會儲存屬性或其他中繼資料。
Avro:訊息會以 Apache Avro 二進位格式儲存。選取「Avro」Avro時,可以啟用下列其他屬性:
寫入中繼資料:這個選項可讓您將訊息中繼資料與訊息一併儲存。系統會將
subscription_name、message_id、publish_time和attributes欄位等中繼資料寫入輸出 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" } ] }「Use topic schema」(使用主題結構定義):選取這個選項後,Pub/Sub 會在寫入 Avro 檔案時,使用訂閱項目附加的 Pub/Sub 主題結構定義。
使用這個選項時,請務必確認是否符合下列額外規定:
主題結構定義必須採用 Apache Avro 格式。
如果同時啟用「使用主題結構定義」和「寫入中繼資料」,主題結構定義的根層級必須有 Record 物件。Pub/Sub 會展開 Record 的欄位清單,納入中繼資料欄位。因此,Record 不得包含與中繼資料欄位 (
subscription_name、message_id、publish_time或attributes) 同名的欄位。
服務帳戶
您可以透過下列選項,將訊息寫入 Cloud Storage bucket:
設定自訂服務帳戶,只有具備服務帳戶
iam.serviceAccounts.actAs權限的使用者,才能建立寫入 bucket 的訂閱項目。包含iam.serviceAccounts.actAs權限的角色範例為「服務帳戶使用者」 (roles/iam.serviceAccountUser) 角色。使用預設的 Pub/Sub 服務代理,讓任何有權在專案中建立訂閱項目的使用者,建立寫入 bucket 的訂閱項目。如未指定自訂服務帳戶,系統會預設使用 Pub/Sub 服務代理。
建立 Cloud Storage 訂閱項目
控制台
-
前往 Cloud de Confiance 控制台的「Subscriptions」(訂閱項目) 頁面。
-
按一下「Create Subscription」 (建立訂閱項目)。
-
在「Subscription ID」(訂閱項目 ID) 欄位中輸入名稱。
如要瞭解如何命名訂閱項目,請參閱「主題或訂閱項目的命名規範」。
-
從下拉式選單中選擇或建立主題。
訂閱項目會接收來自主題的訊息。
如要瞭解如何建立主題,請參閱「建立及管理主題」。
-
在「Delivery type」(傳送類型) 中選取「Write to Cloud Storage」(寫入 Cloud Storage)。
-
按一下 Cloud Storage bucket 的「Browse」(瀏覽)。
-
您可以從任何適當的專案中選取現有 bucket。
-
你也可以按一下建立圖示,然後按照畫面上的指示建立新的值區。
建立 bucket 後,請選取 Cloud Storage 訂閱方案的 bucket。
如要進一步瞭解如何建立 bucket,請參閱「建立 bucket」。
指定 bucket 時,Pub/Sub 會檢查 Pub/Sub 服務代理是否具備 bucket 的適當權限。如果發生權限問題,系統會顯示類似以下的訊息:
Unable to verify if the Pub/Sub service agent has write permissions on this bucket. You may be lacking permissions to view or set permissions。 -
-
如果遇到權限問題,請按一下「設定權限」,然後按照畫面上的指示操作。
或者,按照「將 Cloud Storage 角色指派給 Pub/Sub 服務代理」一文中的操作說明進行。
-
在「檔案格式」選取「文字」或「Avro」。
如果選取「Avro」Avro,您也可以視需要指定是否要在輸出內容中儲存郵件中繼資料。
如要進一步瞭解這兩個選項,包括 Avro 格式的訊息中繼資料選項,請參閱「檔案格式」。
-
選用:您可以為要寫入 Cloud Storage bucket 的所有檔案指定檔案名稱前置字串、後置字串和日期時間。檔案會以「物件」的形式儲存在 bucket 中。
如要進一步瞭解如何設定檔案前置字串、後置字串和日期時間,請參閱「檔案名稱前置字串、後置字串和日期時間」。
-
如果是檔案批次處理,請指定建立新檔案前經過的時間上限。
您也可以視需要設定檔案大小上限或訊息數量上限。
如要進一步瞭解這兩種檔案批次處理選項,請參閱「檔案批次處理」。
-
強烈建議您啟用無法投遞郵件,處理郵件傳送失敗問題。
詳情請參閱「無法傳送的郵件主題」。
-
其他設定可以保留預設值,然後按一下「建立」。
gcloud
-
在 Cloud de Confiance 控制台中啟用 Cloud Shell。
Cloud de Confiance 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
- 如要建立 Cloud Storage 訂閱項目,請執行
gcloud pubsub subscriptions create指令。gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --cloud-storage-bucket=BUCKET_NAME \ --cloud-storage-file-prefix=CLOUD_STORAGE_FILE_PREFIX \ --cloud-storage-file-suffix=CLOUD_STORAGE_FILE_SUFFIX \ --cloud-storage-file-datetime-format=CLOUD_STORAGE_FILE_DATETIME_FORMAT \ --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \ --cloud-storage-max-bytes=CLOUD_STORAGE_MAX_BYTES \ --cloud-storage-max-messages=CLOUD_STORAGE_MAX_MESSAGES \ --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \ --cloud-storage-write-metadata --cloud-storage-use-topic-schema
如要使用自訂服務帳戶,請以額外引數的形式提供:
gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --cloud-storage-bucket=BUCKET_NAME \ --cloud-storage-file-prefix=CLOUD_STORAGE_FILE_PREFIX \ --cloud-storage-file-suffix=CLOUD_STORAGE_FILE_SUFFIX \ --cloud-storage-file-datetime-format=CLOUD_STORAGE_FILE_DATETIME_FORMAT \ --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \ --cloud-storage-max-bytes=CLOUD_STORAGE_MAX_BYTES \ --cloud-storage-max-messages=CLOUD_STORAGE_MAX_MESSAGES \ --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \ --cloud-storage-write-metadata --cloud-storage-use-topic-schema --cloud-storage-service-account-email=SERVICE_ACCOUNT_NAME
在指令中,只需要
SUBSCRIPTION_ID、--topic旗標和--cloud-storage-bucket旗標。其餘旗標為選用,可以省略。更改下列內容:
SUBSCRIPTION_ID:新 Cloud Storage 訂閱方案的名稱或 ID。TOPIC_ID:主題的名稱或 ID。BUCKET_NAME:指定現有 bucket 的名稱。例如,prod_bucket。bucket 名稱不得包含專案 ID。如要建立 bucket,請參閱「建立 bucket」。CLOUD_STORAGE_FILE_PREFIX:指定 Cloud Storage 檔案名稱的前置字元。例如:log_events_。CLOUD_STORAGE_FILE_SUFFIX:指定 Cloud Storage 檔案名稱的後置字串。例如:.txt。CLOUD_STORAGE_FILE_DATETIME_FORMAT: 指定 Cloud Storage 檔案名稱的日期時間格式。 例如:YYYY-MM-DD/hh_mm_ssZ。CLOUD_STORAGE_MAX_DURATION:建立新的 Cloud Storage 檔案前,可經過的時間長度上限。值必須介於 1 公尺至 10 公尺之間。例如:5m。CLOUD_STORAGE_MAX_BYTES:建立新檔案前,可寫入 Cloud Storage 檔案的位元組數上限。值必須介於 1 KB 至 10 GB 之間。例如:20MB。CLOUD_STORAGE_MAX_MESSAGES:可寫入 Cloud Storage 檔案的訊息數量上限,超過這個數量就會建立新檔案。這個值必須大於或等於 1000。例如:100000。CLOUD_STORAGE_OUTPUT_FORMAT:寫入 Cloud Storage 的資料輸出格式。值如下:text:訊息會以原始文字形式寫入,並以換行符號分隔。avro:訊息會以 Avro 二進位檔的形式寫入。--cloud-storage-write-metadata和--cloud-storage-use-topic-schema只會影響輸出格式為avro的訂閱項目。
- SERVICE_ACCOUNT_NAME:指定用於寫入 Cloud Storage 的服務帳戶名稱。
C++
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 C++ 設定說明操作。詳情請參閱 Pub/Sub C++ API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
C#
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 C# 設定說明操作。詳情請參閱 Pub/Sub C# API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Go
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 Go 設定說明操作。詳情請參閱 Pub/Sub Go API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Java
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 Java 設定說明操作。詳情請參閱 Pub/Sub Java API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 Node.js 設定說明操作。詳情請參閱 Pub/Sub Node.js API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Node.js
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 Node.js 設定說明操作。詳情請參閱「Pub/Sub Node.js API 參考文件」。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
PHP
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 PHP 設定說明操作。詳情請參閱 Pub/Sub PHP API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
Python
在試用這個範例之前,請先按照「使用用戶端程式庫的 Pub/Sub 快速入門導覽課程」中的 Python 設定說明操作。詳情請參閱 Pub/Sub Python API 參考文件。
如要向 Pub/Sub 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
監控 Cloud Storage 訂閱項目
Cloud Monitoring 提供多項指標,可用於監控訂閱項目。
如要查看所有可用的 Pub/Sub 相關指標及其說明,請參閱 Pub/Sub 的監控說明文件。
您也可以在 Pub/Sub 中監控訂閱項目。
後續步驟
排解 Cloud Storage 訂閱項目問題。
瞭解 Cloud Storage。
查看 Pub/Sub 的定價,包括 Cloud Storage 訂閱方案。