如何針對從 MSK 和自我管理 Kafka 叢集輪詢的 Lambda 觸發程序進行疑難排解?

4 分的閱讀內容
0

我的 AWS Lambda 函數的設計目的是處理來自 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 叢集或自我管理 Kafka 叢集的記錄。不過,Lambda 觸發程序會顯示錯誤訊息。

簡短描述

事件來源映射 (ESM) 是 AWS Lambda 資源,可從事件來源讀取並且叫用 Lambda 函數。若要叫用 Lambda 函數,Lambda-Kafka ESM 必須能夠執行下列動作:

如果 ESM 的網路、驗證或授權設定防止與叢集通訊,則設定會在叫用函數之前失敗。觸發程序接著會顯示錯誤訊息,協助針對根本原因進行疑難排解。

解決方案

了解 ESM

使用 Amazon MSK 觸發程序自我管理 Kafka 觸發程序設定 Lambda 函數時,系統會自動建立 ESM 資源。ESM 與 Lambda 函數是分開的,它會持續輪詢 Kafka 叢集中主題的記錄。ESM 將這些記錄捆綁到承載中。然後,它會呼叫 Lambda 叫用 API,將承載傳遞至您的 Lambda 函數以進行處理。

**重要:**Lambda-Kafka ESM 不會繼承 Lambda 函數的 VPC 網路設定。對於 MSK 觸發程序和自我管理 Kafka 觸發程序都是如此。MSK ESM 會使用目標 MSK 叢集上設定的子網路和安全群組設定。自我管理 Kafka 觸發程序預設具有 WAN 存取權,但是可以透過對相同帳戶和 AWS 區域中 VPC 的網路存取進行設定。由於網路組態是分開的,Lambda 函數可以在沒有路由到 Kafka 叢集的網路內執行程式碼。

了解 ESM 設定程序

ESM 可以叫用相關聯的 Lambda 函數之前,ESM 會自動完成下列步驟:

1.    ESM 會呼叫 AWS STS API 以取得安全權杖。

2.    如果 SourceAccessConfiguration 包含秘密,則從 AWS Secrets Manager API 獲得該秘密。

3.    對於自我管理 Kakfa ESM:Lambda 會從 ESM 中 selfManagedEventSourceEndPoints 底下設定的主機名稱,解析叢集端點的 IP 地址。

      **對於 MSK ESM:**取得 MSK 叢集的子網路和安全群組組態。

4.    **對於自我管理 Kakfa ESM:**建立與代理程式端點的網路連線。

      **對於 MSK ESM:**使用每個 MSK 叢集子網路中 MSK 叢集的安全群組建立超平面彈性網路介面。

5.    身分驗證:

  • 如果已啟動 TLS 驗證,請檢查代理程式端點提供的 SSL 憑證。
  • 登入代理程式。

6.    授權:

  • 請確定主題存在於叢集中。詢問叢集代理程式,在 ESM 主題參數中設定的主題是否存在於叢集中。
  • 使用 ESM 的 UUID 做為取用程式群組識別碼,在叢集中建立取用程式群組。

7.    從主題輪詢記錄。

8.    將記錄捆綁到小於 6 MB 的承載中。這是 Lambda 叫用承載的限制

9.    ESM 會叫用相關聯 Lambda 函數與記錄的承載。若要這麼做,請對 Lambda 叫用 API 進行同步呼叫。

對網路安全問題進行疑難排解

當 ESM 傳送要求至代理程式端點且未收到回應時,ESM 會將要求視為逾時。當發生代理程式端點逾時,觸發程序會顯示下列錯誤訊息:

"PROBLEM: Connection error. Please check your event source connection configuration. If your event source lives in a VPC, try setting up a new Lambda function or EC2 instance with the same VPC, Subnet, and Security Group settings. Connect the new device to the Kafka cluster and consume messages to ensure that the issue is not related to VPC or Endpoint configuration. If the new device is able to consume messages, please contact Lambda customer support for further investigation. (問題:連線錯誤。請檢查您的事件來源連線組態。如果您的事件來源位於 VPC 中,請嘗試使用相同的 VPC、子網路和安全群組設定來設定新的 Lambda 函數或 EC2 執行個體。將新裝置連線至 Kafka 叢集並取用訊息,以確保問題與 VPC 或端點組態無關。如果新裝置能夠取用訊息,請聯絡 Lambda 客戶支援以進一步調查。)"

若要針對此問題進行疑難排解,請依照上述錯誤訊息中所述的步驟執行。此外,請注意下列各節中的網路組態,以確定您的 ESM 已正確設定。

**注意:**在叢集系統資源不足以處理要求的情況下,也可能會出現來自 ESM 的逾時要求。或者,當 ESM 或叢集上的安全性設定有誤時,也可能出現逾時要求。如果您收到此錯誤,但網路組態沒有任何問題,請檢查叢集代理程式的存取日誌以取得額外的資訊。

自我管理 Kafka ESM 使用的網路組態

自我管理 Kafka ESM 的網路組態與 Lambda 函數類似。根據預設,ESM 可以存取 WAN,但是未設定為 VPC 內的存取。它可以使用特定子網路和安全群組手動設定,以存取 Kafka 叢集。但是,它只能在包含 Lambda 函數的帳戶中存取可從 VPC 存取的叢集。因此,您可以為位於下列位置的 Kafka 叢集建立自我管理 Kafka ESM:

  • 內部部署資料中心
  • 其他雲端提供者
  • 位於不同帳戶之 VPC 中的 Kafka 叢集的 MSK 代理程式

**注意:**您可以建立自我管理 Kafka 觸發程序,該觸發程序會從另一個帳戶中的 MSK 叢集取用。但是存在一些缺點。與 MSK 觸發程序不同的是,AWS Identity and Access Management (IAM) 身分驗證不適用於自我管理 Kafka 觸發程序。此外,透過 VPC 對等互連連線來連線至 MSK 叢集需要特定 VPC 因應措施。如需詳細資訊,請參閱Goldman Sachs 如何透過 AWS PrivateLink 建置與其 Amazon MSK 叢集的跨帳戶連線

Lambda-MSK ESM 的網路組態

為了與 MSK 叢集通訊,MSK ESM 會在叢集使用的每個子網路內建立超平面彈性網路介面。這類似於 Lambda 函數在 VPC 中的運作方式。

MSK ESM 不會使用 Lambda 函數的 VPC 設定。相反地,ESM 會自動使用目標 MSK 叢集上設定的子網路和安全群組設定。接著,MSK ESM 會在 MSK 叢集所使用的每個子網路內建立網路介面。這些網路介面使用 MSK 叢集所使用的相同安全群組。MSK ESM 使用的安全群組和輸入或輸出規則可透過下列 CLI 命令找到:

1.    使用 AWS CLI MSK 命令 describe-cluster 以列出 MSK 叢集使用的安全群組和子網路。

2.    在 describe-cluster 輸出中所列的安全群組上使用 describe-security-groups 命令。

授與流量存取權

MSK 叢集的安全群組必須包含一個規則,該規則會授與自身的輸入流量並將流量輸出給自己。流量也必須透過代理程式使用的下列其中一個開放式驗證連接埠授與:

  • 對於純文字是 9092
  • 對於 TLS 是 9094
  • 對於 SASL 是 9096
  • 對於所有組態是 443

針對初始化、輪詢和叫用期間發生的問題進行疑難排解

"PROBLEM: Connection error. Your VPC must be able to connect to Lambda and STS, as well as Secrets Manager if authentication is required. You can provide access by configuring PrivateLink or a NAT Gateway. (問題:連線錯誤。如果需要驗證,您的 VPC 必須能夠連線至 Lambda 和 STS,以及 Secrets Manager。您可以透過設定 PrivateLink 或 NAT 閘道來提供存取權。)”

出現上述任何錯誤的原因如下:

  • ESM 是在 VPC 中設定的,而且對 STS API 的呼叫失敗或逾時。
  • ESM 是在 VPC 中設定的,而且 Secrets Manager API 連線嘗試失敗或逾時。
  • 觸發程序可以存取您的 Kafka 叢集,但是在透過 Lambda API 叫用函數時逾時。

這些問題可能是由於錯誤的 VPC 設定導致您的 ESM 無法連線其他服務,例如 AWS STS 和 AWS Secrets Manager。請遵循在 VPC 內使用 Apache Kafka 叢集設定 AWS Lambda 中的步驟,正確設定您的 VPC 設定。

如果對 STS API 的呼叫失敗或逾時,您的 VPC 設定會阻止 ESM 在連接埠 443 上連線區域 Lambda 端點。若要解決此問題,請參閱在 VPC 內使用 Apache Kafka 叢集設定 AWS Lambda

如果 SourceAccessConfiguration 包含秘密,則務必從 Secrets Manager 擷取該秘密。

「問題:憑證和/或私有金鑰格式必須是 PEM。」

如果您擁有的秘密不是可由 ESM 解密的格式,就會發生上述錯誤。

若要針對此問題進行疑難排解,請檢查秘密的格式。請注意,Secrets Manager 僅支援 .pem 格式的 X.509 憑證檔案。如需詳細資訊,請參閱提供的憑證或私有金鑰無效 (Amazon MSK) 或提供的憑證或私有金鑰無效 (Kafka)。

「問題:無法解析提供的 Kafka 代理程式端點。」

當您的 ESM 無法將主機名稱轉譯為 IP 地址時,就會發生上述錯誤。

若要解決此錯誤,請確定 ESM 能夠連線到可以轉譯主機名稱的 DNS 伺服器。如果端點的主機名稱位於私有網路內,請將 ESM 設定為使用具有 DNS 設定的 VPC,該設定可以解析主機名稱。

「問題:伺服器無法驗證 Lambda 或 Lambda 無法驗證伺服器。」

當 ESM 所連線的伺服器不是您在 ESM 設定中設定的伺服器時,就會發生上述錯誤。

若要針對此問題進行疑難排解,請確認您已為要連線的伺服器設定 ESM 的設定。

「問題:SASL 驗證失敗。」

當您的伺服器登入嘗試失敗時,就會發生上述錯誤。

從 Amazon MSK 主題觸發的 AWS Lambda 函數可以存取 AWS Secrets Manager 使用 SASL/SCRAM 保護的使用者名稱和密碼。當您的使用者名稱和密碼無法辨識為有效時,就會收到錯誤訊息。

若要解決此錯誤,請登入代理程式並檢查存取日誌。

注意:

「問題:叢集無法授權 Lambda。」

當 ESM 登入代理程式,但是 ESM 使用者沒有從主題輪詢記錄的許可時,就會發生上述錯誤。若要針對此問題進行疑難排解,請參閱叢集無法授權 Lambda (Amazon MSK) 或叢集無法授權 Lambda (Kafka)。


相關資訊

身分驗證和授權錯誤

AWS 官方
AWS 官方已更新 1 年前