Amazon Managed Streaming for Apache Kafka (Amazon MSK) 匯入主題可讓您從 Amazon MSK 持續擷取資料,做為外部來源並匯入 Pub/Sub。然後,您可以將資料串流至 Pub/Sub 支援的任何目的地。
本文將說明如何建立及管理 Amazon MSK 匯入主題。如要建立標準主題,請參閱「建立標準主題」一文。
如要進一步瞭解匯入主題,請參閱「關於匯入主題」。
事前準備
- 進一步瞭解 Pub/Sub 發布程序。 
- 設定工作負載身分聯盟,讓Google Cloud 存取外部串流服務。 
必要角色和權限
    
      如要取得建立及管理 Amazon MSK 匯入主題所需的權限,請要求管理員為您授予主題或專案的 Pub/Sub 編輯者  (roles/pubsub.editor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
  
  
這個預先定義的角色具備建立及管理 Amazon MSK 匯入主題所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要建立及管理 Amazon MSK 匯入主題,必須具備下列權限:
- 
                建立匯入主題:
                  pubsub.topics.create
- 
                刪除匯入主題:
                  pubsub.topics.delete
- 
                取得匯入主題:
                  pubsub.topics.get
- 
                列出匯入主題:
                  pubsub.topics.list
- 
                發布至匯入主題:
                  pubsub.topics.publish and pubsub.serviceAgent
- 
                更新匯入主題:
                  pubsub.topics.update
- 
                取得匯入主題的身分與存取權管理政策:
                  pubsub.topics.getIamPolicy
- 
                設定匯入主題的 IAM 政策:
                  pubsub.topics.setIamPolicy
您可以在專案層級和個別資源層級設定存取權控管。
設定聯合身分來存取 Amazon MSK
Workload Identity 聯盟可讓 Google Cloud 服務存取 Google Cloud外部執行的工作負載。使用身分聯盟時,您不需要維護或傳遞憑證,即可存取其他雲端中的資源。 Google Cloud 您可以改用工作負載本身的 ID 向 Google Cloud 進行驗證,並存取資源。
在 Google Cloud中建立服務帳戶
這個步驟可以省略。如果您已有服務帳戶,可以在這個程序中使用該帳戶,不必建立新的服務帳戶。如果您使用現有的服務帳戶,請前往記錄服務帳戶的專屬 ID,以進行下一個步驟。
如果是 Amazon MSK 匯入主題,Pub/Sub 會使用服務帳戶做為身分,從 AWS 存取資源。
如要進一步瞭解如何建立服務帳戶,包括必要條件、必要角色和權限,以及命名規範,請參閱「建立服務帳戶」。建立服務帳戶後,您可能需要等待 60 秒以上,才能使用該服務帳戶。這種行為的發生,是因為讀取作業最終會保持一致性,因此需要一段時間,新服務帳戶才會顯示。
記下服務帳戶專屬 ID
您需要服務帳戶專屬 ID,才能在 AWS 控制台中設定角色。
- 前往 Google Cloud 控制台的「Service account」(服務帳戶) 詳細資料頁面。 
- 按一下您剛建立的服務帳戶,或打算使用的服務帳戶。 
- 在「服務帳戶詳細資料」頁面中,記下專屬 ID 編號。 - 您需要這組 ID 才能在工作流程中於 AWS 控制台中設定角色。 
為 Pub/Sub 服務帳戶新增服務帳戶憑證建立者角色
服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 可讓主體為服務帳戶建立短期憑證。這些權杖或憑證可用於模擬服務帳戶。
如要進一步瞭解服務帳戶模擬功能,請參閱服務帳戶模擬。
您也可以在這個程序中新增 Pub/Sub 發布者角色 (roles/pubsub.publisher)。如要進一步瞭解角色和新增原因,請參閱「將 Pub/Sub 發布者角色新增至 Pub/Sub 服務帳戶」。
- 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。 
- 按一下「包含 Google提供的角色授予項目」核取方塊。 
- 找出格式為 - service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com的服務帳戶。
- 按一下這個服務帳戶的「編輯主體」按鈕。 
- 視需要按一下「新增其他角色」。 
- 搜尋並點選「服務帳戶憑證建立者角色」 ( - roles/iam.serviceAccountTokenCreator)。
- 按一下「儲存」。 
在 AWS 中建立政策
您需要在 AWS 中設定政策,讓 Pub/Sub 向 AWS 進行驗證,以便從 Amazon MSK 擷取資料。
- 如要瞭解如何在 AWS 建立政策,請參閱建立 IAM 政策。
如要在 AWS 中建立政策,請按照下列步驟操作:
- 登入 AWS 管理主控台,並開啟 IAM 控制台。 
- 在 IAM 的控制台導覽窗格中,依序點選「Access Management」(存取權管理) >「Policies」(政策)。 
- 按一下「建立政策」。 
- 在「Click a service」(點選服務) 中,點選「MSK」。 
- 如果是「允許動作」,請依序點選「讀取」 >「GetBootstrapBrokers」。 - 這項操作會授予權限,以取得 Pub/Sub 用於連線至 MSK 叢集的啟動程序代理程式。 
- 按一下「新增更多權限」。 
- 在「選取服務」中,按一下「Apache Kafka APIs for MSK」。 
- 在「允許的動作」中選取下列項目: 
- 在「Resources」(資源) 中,指定叢集 ARN (如要將政策限制為特定叢集,建議這麼做)。 
- 按一下「新增更多權限」。 
- 在「Select a service」(選取服務) 中,按一下「STS」。 
- 在「允許的動作」中,依序點選「寫入」 >「AssumeRoleWithWebIdentity」AssumeRoleWithWebIdentity。 - 這項操作會授予權限,讓 Pub/Sub 透過身分聯盟向 Amazon MSK 驗證身分,並取得一組臨時安全憑證。 
- 點選「下一步」。 
- 輸入政策名稱和說明。 
- 按一下「建立政策」。 
使用自訂信任政策在 AWS 中建立角色
您必須在 AWS 中建立角色,Pub/Sub 才能向 AWS 進行驗證,從 Amazon MSK 擷取資料。
- 登入 AWS 管理主控台,並開啟 IAM 控制台。 
- 在 IAM 控制台的導覽窗格中,按一下「角色」。 
- 按一下「建立角色」。 
- 在「選取信任的實體」中,按一下「自訂信任政策」。 
- 在「Custom trust policy」(自訂信任政策) 部分,輸入或貼上下列內容: - { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "<SERVICE_ACCOUNT_UNIQUE_ID>" } } } ] }- 將 - <SERVICE_ACCOUNT_UNIQUE_ID>替換為您在「記錄服務帳戶專屬 ID」中記錄的服務帳戶專屬 ID。
- 點選「下一步」。 
- 在「新增權限」中,搜尋並點選您剛建立的自訂政策。 
- 點選「下一步」。 
- 輸入角色名稱和說明。 
- 按一下「建立角色」。 
將 Pub/Sub 發布者角色新增至 Pub/Sub 主體
如要啟用發布功能,您必須將發布者角色指派給 Pub/Sub 服務帳戶,Pub/Sub 才能發布至 Amazon MSK 匯入主題。
為 Pub/Sub 服務帳戶新增 Pub/Sub 服務代理人角色
如要允許 Pub/Sub 使用匯入主題專案的發布配額,Pub/Sub 服務代理需要匯入主題專案的 serviceusage.services.use 權限。
如要提供這項權限,建議您將 Pub/Sub 服務代理人角色新增至 Pub/Sub 服務帳戶。
如果 Pub/Sub 服務帳戶沒有 Pub/Sub 服務代理人角色,可以按照下列步驟授予:
- 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。 
- 按一下「包含 Google提供的角色授予項目」核取方塊。 
- 找出格式為 - service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com的服務帳戶。
- 按一下這個服務帳戶的「編輯主體」按鈕。 
- 視需要按一下「新增其他角色」。 
- 搜尋並點選「Pub/Sub Service Agent role」(Pub/Sub 服務代理角色) ( - roles/pubsub.serviceAgent)。
- 按一下「儲存」。 
允許從所有主題發布內容
如果您尚未建立任何 Amazon MSK 匯入主題,請使用這個方法。
- 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。 
- 按一下「包含 Google提供的角色授予項目」核取方塊。 
- 找出格式為 - service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com的服務帳戶。
- 按一下這個服務帳戶的「編輯主體」按鈕。 
- 視需要按一下「新增其他角色」。 
- 搜尋並按一下 Pub/Sub 發布者角色 ( - roles/pubsub.publisher)。
- 按一下「儲存」。 
啟用從單一主題發布的功能
只有在 Amazon MSK 匯入主題已存在時,才使用這個方法。
- 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. 
- 執行 - gcloud pubsub topics add-iam-policy-binding指令:- gcloud pubsub topics add-iam-policy-binding TOPIC_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" \ --role="roles/pubsub.publisher" - 更改下列內容: - TOPIC_ID:Amazon MSK 匯入主題的主題 ID。
- PROJECT_NUMBER:專案編號。如要查看專案編號,請參閱「識別專案」。
 
- 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。 
- 針對發出建立或更新主題呼叫的主體,按一下「編輯主體」按鈕。 
- 視需要按一下「新增其他角色」。 
- 搜尋並點選「服務帳戶使用者角色」( - roles/iam.serviceAccountUser)。
- 按一下「儲存」。 
- 即使快速連續建立主題和訂閱項目,也可能導致資料遺失。在免付費期間,主題會短暫存在。如果在這段時間內有任何資料傳送至主題,這些資料都會遺失。先建立主題,然後建立訂閱項目,再將主題轉換為匯入主題,即可確保匯入程序不會遺漏任何訊息。 
- 如要使用相同名稱重新建立現有匯入主題的 Kafka 主題,您無法直接刪除 Kafka 主題並重新建立。這項操作可能會導致 Pub/Sub 的位移管理失效,進而造成資料遺失。如要解決這個問題,請按照下列步驟操作: - 刪除 Pub/Sub 匯入主題。
- 刪除 Kafka 主題。
- 建立 Kafka 主題。
- 建立 Pub/Sub 匯入主題。
 
- 系統一律會從最早的偏移讀取 Amazon MSK Kafka 主題的資料。 
- 前往 Google Cloud 控制台的「主題」頁面。 
- 按一下「建立主題」。 
- 在「主題 ID」欄位中,輸入 Amazon MSK 匯入主題的 ID。如要進一步瞭解如何為主題命名,請參閱命名規範。 
- 選取「新增預設訂閱項目」。 
- 選取「啟用擷取功能」。 
- 選取「Amazon MSK」做為擷取來源。 
- 輸入下列詳細資訊: - 叢集 ARN:要擷取至 Pub/Sub 的 Amazon MSK ARN。ARN 格式如下:arn:aws:kafka:${Region}:${Account}:cluster/${ClusterName}/${ClusterId}。
- 主題:要擷取至 Pub/Sub 的 Amazon MSK Kafka 主題名稱。
- AWS 角色 ARN:AWS 角色的 ARN。角色的 ARN 格式如下:arn:aws:iam::${Account}:role/${RoleName}。
- 服務帳戶:您在「在 Google Cloud中建立服務帳戶」中建立的服務帳戶。
 
- 叢集 ARN:要擷取至 Pub/Sub 的 Amazon MSK ARN。ARN 格式如下:
- 按一下「建立主題」。 
- 
  
   
   
  
 
 
 
  
    
    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. 
- 執行 - gcloud pubsub topics create指令:- gcloud pubsub topics create TOPIC_ID \ --aws-msk-ingestion-cluster-arn MSK_CLUSTER_ARN \ --aws-msk-ingestion-topic MSK_TOPIC \ --aws-msk-ingestion-aws-role-arn MSK_ROLE_ARN \ --aws-msk-ingestion-service-account PUBSUB_SERVICE_ACCOUNT- 更改下列內容: - TOPIC_ID:Pub/Sub 主題的名稱或 ID。
- MSK_CLUSTER_ARN:要擷取至 Pub/Sub 的 Amazon MSK 叢集 ARN。ARN 格式如下:- arn:aws:kafka:${Region}:${Account}:cluster/${ClusterName}/${ClusterId}。
- MSK_TOPIC:您要擷取至 Pub/Sub 的 Amazon MSK Kafka 主題名稱。
- MSK_ROLE_ARN:AWS 角色的 ARN。角色的 ARN 格式如下:- arn:aws:iam::${Account}:role/${RoleName}。
- PUBSUB_SERVICE_ACCOUNT:您在「在 Google Cloud 中建立服務帳戶」中建立的服務帳戶。
 
- 前往 Google Cloud 控制台的「主題」頁面。 
- 按一下 Amazon MSK 匯入主題。 
- 在主題詳細資料頁面中,按一下「編輯」。 
- 更新要變更的欄位。 
- 按一下「Update」。 
- 
  
   
   
  
 
 
 
  
    
    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. 
- 使用下列範例中提及的所有標記,執行 - gcloud pubsub topics update指令:- gcloud pubsub topics update TOPIC_ID \ --aws-msk-ingestion-cluster-arn MSK_CLUSTER_ARN \ --aws-msk-ingestion-topic MSK_TOPIC \ --aws-msk-ingestion-aws-role-arn MSK_ROLE_ARN \ --aws-msk-ingestion-service-account PUBSUB_SERVICE_ACCOUNT - 更改下列內容: - TOPIC_ID:Pub/Sub 主題的名稱或 ID。
- MSK_CLUSTER_ARN:要擷取至 Pub/Sub 的 Amazon MSK 叢集 ARN。ARN 格式如下:arn:aws:kafka:${Region}:${Account}:cluster/${ClusterName}/${ClusterId}。
- MSK_TOPIC:要擷取至 Pub/Sub 的 Amazon MSK Kafka 主題名稱。
- MSK_ROLE_ARN:AWS 角色的 ARN。角色的 ARN 格式如下:arn:aws:iam::${Account}:role/${RoleName}。
- PUBSUB_SERVICE_ACCOUNT:您在「在 Google Cloud 中建立服務帳戶」中建立的服務帳戶。
 
- 為主題選擇訂閱類型。 
- 瞭解如何將訊息發布至主題。 
- 使用 gcloud CLI、REST API 或用戶端程式庫建立或修改主題。 
將服務帳戶使用者角色新增至服務帳戶
服務帳戶使用者角色 (roles/iam.serviceAccountUser) 包含 iam.serviceAccounts.actAs 權限,可讓主體將服務帳戶附加至 Amazon MSK 匯入主題的擷取設定,並將該服務帳戶用於同盟身分。
使用 Amazon MSK 匯入主題
您可以建立新的匯入主題,或編輯現有主題。
注意事項
建立 Amazon MSK 匯入主題
如要進一步瞭解與主題相關聯的屬性,請參閱「主題的屬性」。
請確認已完成下列程序:
如要建立 Amazon MSK 匯入主題,請按照下列步驟操作:
控制台
gcloud
C++
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 C++ 設定操作說明進行操作。詳情請參閱 Pub/Sub C++ API 參考說明文件。
Go
以下範例使用 Go Pub/Sub 用戶端程式庫的主要版本 (v2)。如果您仍在使用第 1 版程式庫,請參閱第 2 版遷移指南。如要查看第 1 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的操作說明設定 Go 環境。詳情請參閱 Pub/Sub Go API 參考說明文件。
Java
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Java 設定操作說明進行操作。詳情請參閱 Pub/Sub Java API 參考說明文件。
Node.js
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件。
Node.ts
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Node.js 設定說明進行操作。詳情請參閱 Pub/Sub Node.js API 參考說明文件。
Python
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Python 設定操作說明來進行。詳情請參閱 Pub/Sub Python API 參考說明文件。
如要進一步瞭解 ARN,請參閱「Amazon 資源名稱 (ARN)」和「IAM 識別碼」。
如果發生問題,請參閱「排解 Amazon MSK 匯入主題的問題」。
編輯 Amazon MSK 匯入主題
如要編輯 Amazon MSK 匯入主題的擷取資料來源設定,請按照下列步驟操作:
控制台
gcloud
配額與限制
匯入主題的發布者輸送量會受限於主題的發布配額。詳情請參閱 Pub/Sub 配額與限制。