設定訊息儲存政策

如果您發布訊息至全球 Pub/Sub 端點,Pub/Sub 會自動將訊息儲存在最靠近的Cloud de Confiance by S3NS 區域。如要控管訊息的儲存和處理區域,可以為主題設定訊息儲存政策

訊息儲存政策總覽

建立新主題或使用控制台、Google Cloud CLI 或 REST API 更新主題時,可以設定訊息儲存政策。

郵件儲存空間政策僅適用於郵件內容。這項政策不適用於其他資料,例如主題名稱、標籤或身分與存取權管理 (IAM) 設定。

當用戶端將訊息發布至 Pub/Sub 時,Pub/Sub 會儲存訊息。訊息儲存政策可確保 Pub/Sub 只會在您指定的一組Cloud de Confiance by S3NS 區域中儲存及處理訊息,無論發布或訂閱要求來自何處。如果政策允許發布作業使用多個區域,Pub/Sub 會將訊息儲存在允許的區域,該區域必須最靠近發布訊息進入 Cloud de Confiance 網路的位置。

指定訊息儲存政策時,您可以設定 enforceInTransitTrue。這個標記會控管下列項目:

  • 如果訊息儲存政策不允許在特定區域中儲存訊息,系統就會拒絕在該區域收到的發布、提取和串流提取要求,並傳回 FAILED_PRECONDITION 錯誤。

  • 如果用戶端在允許的區域 Cloud de Confiance 內執行 (例如在 Compute Engine VM 中),就可以使用全域端點。用戶端的要求會在允許的區域中於本機轉送。 用戶端也可以使用指定允許區域的位置端點區域端點

  • 如果用戶端在不允許的區域內執行,或在區域外執行,則必須使用以允許區域清單中區域為目標的區域或區域端點。 Cloud de Confiance Cloud de Confiance

  • 推送訂閱項目的傳送作業只會在允許的 Cloud 區域內處理。在某些情況下,這項限制可能會完全暫停推送訂閱項目的訊息傳送作業。如果推送訂閱項目因訊息儲存位置、允許的區域和匯出資源位置等因素,導致推送位置受到過度限制,就會進入這種狀態,並顯示在 Stackdriver 中。

新主題的訊息儲存政策

  • 如果您在建立主題時未指定訊息儲存政策,系統會根據有效的資源位置限制機構政策,自動決定訊息儲存政策。如果沒有生效的機構政策,訊息儲存政策會允許所有地區。

  • 同樣地,如果沒有指定訊息儲存政策,系統會根據有效的「強制執行 Pub/Sub 訊息的傳輸中區域」組織政策,判斷 enforceInTransit 旗標。如要進一步瞭解這項組織政策,請參閱「組織政策限制」。

  • 建立主題時,如果指定訊息儲存政策,該政策只能包含有效資源位置限制機構政策允許的區域。如果沒有生效的機構政策,訊息儲存政策可以包含任何區域。

現有主題的訊息儲存政策

  • 機構政策更新後,變更不會自動傳播至現有主題。因此,現有主題的訊息儲存政策可能會與最新的機構政策不同步。詳情請參閱「管理機構和主題政策之間的差異」。

  • 更新主題的訊息儲存政策後,變更不會傳播至已發布的訊息。根據舊政策儲存的訊息不會移至新政策適用的位置。而是只會套用至更新後發布的訊息。

例外狀況

這項政策會指定允許的 Cloud de Confiance 區域名稱清單。因此,系統不支援下列項目:

  • 排除清單
  • 可用區或多區域位置

如果您發布的訊息含有排序鍵,且訊息儲存空間政策排除最靠近的區域,Pub/Sub 服務會傳回錯誤。

設定訊息儲存政策

設定主題訊息儲存政策的方法有兩種,包括:

  • 使用機構政策設定訊息儲存政策。
  • 建立主題時,請設定訊息儲存政策。

使用機構政策設定訊息儲存政策

控制台

如要設定適用於多個主題的訊息儲存政策,請設定資源位置限制機構政策。

  1. 前往 Identity and Access Management 控制台的「組織政策」 頁面。

    前往「Organization policies」(組織政策)

  2. 選取要設定機構政策的資源階層節點 (機構、資料夾或專案)。

  3. 在篩選器中輸入「Resource Location Restriction」(資源位置限制)

  4. 按一下「Cloud de Confiance by S3NS - Resource Location Restriction」(資源位置限制)。

  5. 點選「編輯」

  6. 視需要新增或移除區域。

    您建立的任何新主題都會沿用這些設定。變更不會自動套用至現有主題。如要更新現有主題,請執行更新作業

如要進一步瞭解組織政策,請參閱「管理資源 Cloud de Confiance by S3NS 」。

建立主題時設定訊息儲存政策

控制台

使用 Cloud de Confiance 控制台時,您無法在建立主題時設定訊息儲存政策。所有新主題都會自動沿用您的資源位置限制機構政策。

不過,建立主題後,您可以在控制台中透過更新作業變更訊息儲存政策。

gcloud CLI

如要建立具有特定訊息儲存政策的主題,請使用 gcloud pubsub topics create 指令並加上 --message-storage-policy-allowed-regions 標記:

gcloud pubsub topics create TOPIC_ID \
    --message-storage-policy-allowed-regions=REGION1,REGION2

更改下列內容:

  • TOPIC_ID:新主題的 ID 或名稱。
  • REGION1, REGION2:以半形逗號分隔的 Cloud de Confiance 支援區域清單。

REST

如要建立主題並設定訊息儲存政策,請使用 projects.topics.create 方法。

要求必須使用 Authorization 標頭中的存取權杖進行驗證。如要取得目前應用程式預設憑證的存取權杖,請執行 gcloud auth application-default print-access-token

 POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
 Authorization: Bearer $(gcloud auth application-default print-access-token)
 Content-Type: application/json --data @response-body.json

指定以下要求主體欄位:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": ["REGION"],
    "enforceInTransit": true
  }
}

其中:

  • PROJECT_ID 是您的專案 ID。

  • TOPIC_ID 是主題 ID。

  • REGION 是您指定的區域。

回應範例:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

如要進一步瞭解如何設定訊息儲存政策,請參閱下列 API 參考資料。

更新訊息儲存政策

控制台

  1. 在 Cloud de Confiance 控制台中,開啟「主題詳細資料」頁面。

    前往主題詳細資料

  2. 選取要更新的主題。

    你可以選取多個主題。

  3. 在「資訊面板」中,選取「儲存空間政策」分頁標籤。

    這個面板預設可能會收合。如果面板已收合,請按一下「顯示資訊面板」

  4. 視需要選取或取消選取多個區域。

  5. 按一下「Update」

gcloud CLI

如要將機構資源位置限制政策中定義的訊息儲存政策推送至主題,請執行下列指令:gcloud pubsub topics update

gcloud pubsub topics update TOPIC_ID \
    --recompute-message-storage-policy

如要更新主題的訊息儲存政策,並指定特定區域,請執行 gcloud pubsub topics update 指令並加上 --message-storage-policy-allowed-regions 標記:

gcloud pubsub topics update TOPIC_ID \
    --message-storage-policy-allowed-regions=REGION1,REGION2

更改下列內容:

  • TOPIC_ID:要更新的主題 ID。
  • REGION1, REGION2:以半形逗號分隔的 Cloud de Confiance 支援區域清單。

REST

如要使用訊息儲存政策更新主題,請使用 projects.topics.patch 方法。

要求必須使用 Authorization 標頭中的存取權杖進行驗證。如要取得目前應用程式預設憑證的存取權杖,請執行 gcloud auth application-default print-access-token

 PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
 Authorization: Bearer $(gcloud auth application-default print-access-token)
 Content-Type: application/json --data @response-body.json

指定以下要求主體欄位:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": ["REGION"], // Replace with your required region
    "enforceInTransit": true
  }
}

其中:

  • PROJECT_ID 是您的專案 ID。

  • TOPIC_ID 是主題 ID。

  • REGION 是您指定的區域。

回應範例:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

如要進一步瞭解如何更新訊息儲存空間政策,請參閱下列 API 參考資料。

管理機構和主題政策之間的差異

查看機構政策和主題政策的差異

控制台

控制台會顯示機構政策與個別主題訊息儲存空間政策的差異。 Cloud de Confiance

如要查看是否有任何主題與機構政策不同步,請按照下列步驟操作:

  1. 前往「主題詳細資料」頁面。

    前往主題詳細資料

  2. 選取主題。

  3. 在「資訊面板」中,選取「儲存空間政策」分頁標籤。

    這個面板預設可能會收合。如果資訊面板已收合,請按一下「顯示資訊面板」

    面板會顯示儲存空間政策,以及機構和主題政策之間的差異。

gcloud CLI

如要檢查目前指派給主題的政策,請執行下列指令:

gcloud pubsub topics describe TOPIC_ID

更改下列內容:

  • TOPIC_ID:您要檢查的主題 ID。

解決機構和主題政策之間的差異

控制台

  1. 在 Cloud de Confiance 控制台中,開啟「主題詳細資料」頁面。

    前往 Pub/Sub

  2. 選取主題。

  3. 在「資訊面板」中,選取「儲存空間政策」分頁標籤。

    這個面板預設可能會收合。如果面板已收合,請按一下「顯示資訊面板」

    面板會顯示儲存空間政策和任何差異。

    如有任何差異,資訊面板會顯示三個選項,可將主題的儲存空間政策與機構政策同步,包括:

    • 主題允許儲存在不允許的位置

      進行更新,僅允許訊息儲存在政策允許的位置。

    • 主題不允許儲存在某些允許的位置

      進行更新,允許訊息儲存在政策允許的任何位置。

    • 主題不允許和允許的位置皆已過期

      進行更新,允許訊息儲存在政策允許的位置。

  4. 選取適當的選項來解決問題。

  5. 按一下「更新主題」

    系統會開啟「同步處理至機構儲存政策」對話方塊。

  6. 按一下「更新主題」

監控與疑難排解

為協助您瞭解訊息資料的儲存位置,Pub/Sub 提供按各 Cloud de Confiance 區域細分的指標。

您可以運用這些指標:

  • 瞭解資料在全球的分布情形。
  • 根據這些資料,最佳化發布端和訂閱端部署位置。

郵件儲存空間指標

未確認的已儲存訊息數量:

subscription/num_unacked_messages_by_region

儲存的資料量:

subscription/unacked_bytes_by_region

最舊訊息存在時間:

subscription/oldest_unacked_message_age_by_region

主題和快照可使用類似指標。此外,您也可以選擇保留已確認的訊息以供重播,並查看相關指標。例如:

subscription/num_retained_acked_messages_by_region

效能和可用性影響

訊息儲存政策不會影響整體服務水準協議,但如果發布商或訂閱者在政策不允許的區域 Cloud de Confiance 或外部執行作業,就會出現可用性控管的取捨問題。如果使用者在訊息儲存空間政策允許的區域內執行發布商用戶端,服務延遲或可用性不會有任何變化。

如要瞭解這些取捨,請考慮發布要求的轉送方式。一般來說,Pub/Sub 會盡可能將訊息儲存在最接近要求來源的位置。一般來說,在Cloud de Confiance 內發出的要求會繫結至相同區域的 Pub/Sub 執行個體。如果發布者位於單一區域,即使在訊息儲存政策中新增更多區域,也不會提高可用性。從 Cloud de Confiance by S3NS外部發布訊息時,系統會多一層轉送機制,將要求傳送至附近的 Cloud de Confiance by S3NS 區域,該區域必須提供 Pub/Sub 服務。

請考慮採用只允許 us-central1 區域的郵件儲存政策。

  1. us-east1 中執行的發布端用戶端發出 Publish 要求。
  2. 要求會路由至 us-east1 中的 Pub/Sub 伺服器。
  3. 要求會轉送至訊息儲存政策允許且距離最近的區域 (即「us-central1」),而不是在「us-east1」中儲存資料。
  4. Pub/Sub 會將發布的訊息儲存在 us-central1 中,並從該位置將訊息轉送給訂閱端。

這項機制會影響要求延遲時間和整體系統可用性。由於要求會經過更多網路連結,因此完成時間較長,失敗的機率也相對較高。這也表示訂閱者可能會稍晚收到訊息,因為訊息必須先傳送至最近的允許區域,才能進行傳送。如果政策允許單一區域,但發布商應用程式在多個區域中執行,分散式應用程式的可用性就會受到限制,只能在允許的單一區域中運作。

後續步驟