Wie behebe ich Fehler bei Lambda-Auslösern für diese Abfrage von MSK- und selbstverwalteten Kafka-Clustern?

Lesedauer: 9 Minute
0

Meine AWS-Lambda-Funktion ist darauf ausgelegt, Datensätze aus meinem Cluster von Amazon Managed Streaming für Apache Kafka (Amazon MSK) oder meinem selbstverwalteten Kafka-Cluster zu verarbeiten. Der Lambda-Auslöser zeigt jedoch eine Fehlermeldung an.

Kurzbeschreibung

Eine Zuordnung von Ereignisquellen (ESM) ist eine AWS-Lambda-Ressource, die aus einer Ereignisquelle liest und eine Lambda-Funktion aufruft. Um eine Lambda-Funktion aufzurufen, muss eine Lambda-Kafka-ESM die folgenden Aktionen ausführen können:

Wenn die Netzwerk-, Authentifizierungs- oder Autorisierungseinstellungen eines ESM die Kommunikation mit dem Cluster verhindern, schlägt die Installation fehl, bevor eine Funktion aufgerufen werden kann. Der Auslöser zeigt dann eine Fehlermeldung an, die bei der Behebung der Grundursache hilft.

Lösung

Verstehen von ESMs

Wenn eine Lambda-Funktion mit einem Amazon-MSK-Auslöser oder einem selbstverwalteten Kafka-Auslöser konfiguriert wird, wird automatisch eine ESM-Ressource erstellt. Ein ESM ist von der Lambda-Funktion getrennt und fragt kontinuierlich Datensätze aus dem Thema im Kafka-Cluster ab. Der ESM bündelt diese Datensätze zu einer Nutzlast. Anschließend wird die Lambda-Aufruf-API aufgerufen, um die Nutzlast zur Verarbeitung an Ihre Lambda-Funktion zu übermitteln.

Wichtig: Lambda-Kafka-ESMs erben nicht die VPC-Netzwerkeinstellungen der Lambda-Funktion. Dies gilt sowohl für MSK-Auslöser als auch für selbstverwaltete Kafka-Auslöser. Ein MSK-ESM verwendet die Subnetz- und Sicherheitsgruppeneinstellungen, die auf dem MSK-Zielcluster konfiguriert sind. Ein selbstverwalteter Kafka-Auslöser verfügt standardmäßig über WAN-Zugriff, kann jedoch mit Netzwerkzugriff auf eine VPC in demselben Konto und derselben AWS-Region konfiguriert werden. Da die Netzwerkkonfiguration getrennt ist, kann eine Lambda-Funktion Code in einem Netzwerk ausführen, das keine Route zum Kafka-Cluster hat.

Verstehen des ESM-Einrichtungsprozesses

Bevor der ESM die zugehörige Lambda-Funktion aufrufen kann, führt der ESM automatisch die folgenden Schritte aus:

1.    Der ESM ruft AWS-STS-APIs auf, um ein Sicherheitstoken zu erhalten.

2.    Wenn SourceAccessConfiguration ein Geheimnis enthält, greifen Sie auf dieses Geheimnis aus der AWS-Secrets-Manager-API zu.

3.    Für selbstverwaltetes Kakfa-ESM: Lambda löst die IP-Adresse der Cluster-Endpunkte aus dem Hostnamen auf, der in ESM unter SelfManagedEventSourceEndpoints konfiguriert ist.

      Für MSK-ESM: Rufen Sie die Subnetz- und Sicherheitsgruppenkonfiguration des MSK-Clusters ab.

4.    Für selbstverwaltetes Kakfa-ESM: Stellen Sie eine Netzwerkverbindung zum Broker-Endpunkt her.

      Für MSK-ESM: Erstellen Sie eine elastische Hyperplane-Netzwerkschnittstelle mit der Sicherheitsgruppe des MSK-Clusters in jedem Subnetz des MSK-Clusters.

5.    Authentifizierung:

  • Wenn die TLS-Authentifizierung aktiviert ist, überprüfen Sie das SSL-Zertifikat, das vom Broker-Endpunkt vorgelegt wird.
  • Melden Sie sich beim Broker an.

6.    Autorisierung:

  • Stellen Sie sicher, dass das Thema im Cluster vorhanden ist. Fragen Sie die Cluster-Broker, ob das Thema, das im Themen-Parameter des ESM konfiguriert ist, im Cluster existiert.
  • Erstellen Sie eine Benutzergruppe im Cluster, indem Sie die UUID des ESM als Benutzergruppen-ID verwenden.

7.    Rufen Sie die Umfrageergebnisse zum Thema auf.

8.    Bündeln Sie die Datensätze zu einer Nutzlast, die kleiner als 6 MB ist. Dies ist das Limit für Lambda-Aufruf-Nutzlasten.

9.    Der ESM ruft die zugehörige Lambda-Funktion mit der Nutzlast der Datensätze auf. Rufen Sie dazu die Lambda-Aufruf-API synchron auf.

Fehlerbehebung bei der Netzwerksicherheit

Wenn der ESM eine Anfrage an die Broker-Endpunkte sendet und keine Antwort erhält, betrachtet der ESM die Anfrage als Timeout. Wenn ein Timeout für den Broker-Endpunkt auftritt, zeigt der Auslöser die folgende Fehlermeldung an:

„PROBLEM: Verbindungsfehler. Bitte überprüfen Sie die Verbindungskonfiguration Ihrer Ereignisquelle. Wenn sich Ihre Ereignisquelle in einer VPC befindet, versuchen Sie, eine neue Lambda-Funktion oder EC2-Instance mit denselben VPC-, Subnetz- und Sicherheitsgruppeneinstellungen einzurichten. Verbinden Sie das neue Gerät mit dem Kafka-Cluster und verarbeiten Sie Nachrichten, um sicherzustellen, dass das Problem nicht mit der VPC- oder Endpunkt-Konfiguration zusammenhängt. Wenn das neue Gerät Nachrichten verarbeiten kann, wenden Sie sich für weitere Untersuchungen an den Lambda-Kundenservice.“

Um das Problem zu beheben, befolgen Sie die Schritte, die in der vorherigen Fehlermeldung beschrieben werden. Beachten Sie außerdem die Netzwerkkonfigurationen in den folgenden Abschnitten, um sicherzustellen, dass Ihr ESM richtig konfiguriert ist.

Hinweis: Zeitverzögerte Anfragen von ESM können auch in Situationen auftreten, in denen dem Cluster nicht genügend Systemressourcen zur Bearbeitung der Anfrage zur Verfügung stehen. Oder es kann zu zeitverzögerten Anfragen kommen, wenn die falschen Sicherheitseinstellungen auf dem ESM oder Cluster konfiguriert sind. Wenn Sie diesen Fehler erhalten und keine Probleme mit der Netzwerkkonfiguration vorliegen, überprüfen Sie die Zugriffsprotokolle des Cluster-Brokers auf weitere Informationen.

Netzwerkkonfiguration, die ein selbstverwalteter Kafka-ESM verwendet

Die Netzwerkkonfiguration eines selbstverwalteten Kafka-ESM ähnelt einer Lambda-Funktion. Standardmäßig hat der ESM Zugriff auf das WAN, ist jedoch nicht für den Zugriff innerhalb einer VPC konfiguriert. Der ESM kann manuell mit bestimmten Subnetzen und Sicherheitsgruppen für den Zugriff auf einen Kafka-Cluster konfiguriert werden. Der ESM kann jedoch nur auf einen Cluster zugreifen, der von einer VPC in dem Konto aus erreichbar ist, das die Lambda-Funktion enthält. Daher können Sie einen selbstverwaltetes Kafka-ESM für einen Kafka-Cluster erstellen, der sich an den folgenden Speicherorten befindet:

  • Einem On-Premises-Rechenzentrum
  • Einem anderen Cloud-Anbieter
  • Die MSK-Broker eines Kafka-Clusters, der sich in der VPC eines anderen Kontos befindet

Hinweis: Es ist möglich, einen selbstverwalteten Kafka-Auslöser zu erstellen, der von einem MSK-Cluster in einem anderen Konto verbraucht wird. Es gibt jedoch einige Nachteile. Im Gegensatz zu einem MSK-Auslöser ist die Authentifizierung von AWS Identity and Access Management (IAM) für selbstverwaltete Kafka-Auslöser nicht verfügbar. Für die Verbindung mit dem MSK-Cluster über eine VPC-Peering-Verbindung sind außerdem spezielle VPC-Umgehungslösungen erforderlich. Weitere Informationen finden Sie unter Wie Goldman Sachs mit AWS PrivateLink kontenübergreifende Konnektivität zu ihren Amazon-MSK-Clustern aufbaut.

Netzwerkkonfiguration eines Lambda-MSK-ESM

Für die Kommunikation mit dem MSK-Cluster erstellt ein MSK-ESM in jedem Subnetz, das vom Cluster verwendet wird, eine elastische Hyperebenen-Netzwerkschnittstelle. Dies ähnelt der Funktionsweise einer Lambda-Funktion in einer VPC.

Ein MSK-ESM verwendet nicht die VPC-Einstellungen der Lambda-Funktion. Stattdessen verwendet der ESM automatisch die Subnetz- und Sicherheitsgruppeneinstellungen, die auf dem MSK-Zielcluster konfiguriert sind. Der MSK-ESM erstellt dann eine Netzwerkschnittstelle in jedem der Subnetze, die vom MSK-Cluster verwendet werden. Diese Netzwerkschnittstellen verwenden dieselbe Sicherheitsgruppe, die vom MSK-Cluster verwendet wird. Die Sicherheitsgruppen und Eingangs- oder Ausgangsregeln, die vom MSK-ESM verwendet werden, können mit den folgenden CLI-Befehlen gefunden werden:

1.    Verwenden Sie den AWS-CLI-MSK-Befehl describe-cluster, um die vom MSK-Cluster verwendeten Sicherheitsgruppen und Subnetze aufzuführen.

2.    Verwenden Sie den Befehl describe-security-groups für die Sicherheitsgruppen, die in der Ausgabe von describe-cluster aufgeführt werden.

Zugriff auf Datenverkehr gewähren

Die Sicherheitsgruppe des MSK-Clusters muss eine Regel enthalten, die eingehenden Datenverkehr von sich selbst und ausgehenden Datenverkehr an sich selbst gewährt. Der Datenverkehr muss außerdem über einen der folgenden offenen Authentifizierungsports gewährt werden, die vom Broker verwendet werden:

  • 9092 für Klartext
  • 9094 für TLS
  • 9096 für SASL
  • 443 für alle Konfigurationen

Beheben von Problemen, die während der Initialisierung, Abfrage und des Aufrufs auftreten können

„PROBLEM: Verbindungsfehler. Ihre VPC muss in der Lage sein, eine Verbindung zu Lambda und STS sowie zu Secrets Manager herzustellen, falls eine Authentifizierung erforderlich ist. Sie können den Zugriff bereitstellen, indem Sie PrivateLink oder ein NAT-Gateway konfigurieren.“

Der vorhergehende Fehler tritt aus den folgenden Gründen auf:

  • Der ESM ist in einer VPC konfiguriert, und Aufrufe der STS-API schlagen fehl oder führen zu einem Timeout.
  • Der ESM ist in einer VPC konfiguriert, und die Secrets-Manager-API-Verbindungsversuche schlagen fehl oder dauern an.
  • Der Auslöser kann auf Ihren Kafka-Cluster zugreifen, aber es tritt ein Timeout auf, wenn Ihre Funktion über die Lambda-API aufgerufen wird.

Diese Probleme können auf falsche VPC-Einstellungen zurückzuführen sein, die verhindern, dass Ihr ESM andere Services wie AWS STS und AWS Secrets Manager erreicht. Befolgen Sie die Schritte unter Einrichten von AWS Lambda mit einem Apache-Kafka-Cluster innerhalb einer VPC, um Ihre VPC-Einstellungen richtig zu konfigurieren.

Wenn Aufrufe der STS-API fehlschlagen oder eine Zeitüberschreitung auftritt, verhindern Ihre VPC-Einstellungen, dass Ihr ESM den regionalen Lambda-Endpunkt auf Port 443 erreicht. Informationen zur Behebung dieses Problems finden Sie unter Einrichten von AWS Lambda mit einem Apache-Kafka-Cluster innerhalb einer VPC.

Wenn SourceAccessConfiguration ein Geheimnis enthält, müssen Sie dieses Geheimnis unbedingt vom Secrets Manager abrufen.

„PROBLEM: Das Zertifikat und/oder der private Schlüssel müssen im PEM-Format vorliegen.“

Der vorherige Fehler tritt auf, wenn Sie ein Geheimnis haben, das nicht in einem Format vorliegt, das vom ESM entschlüsselt werden kann.

Um dieses Problem zu beheben, überprüfen Sie das Format Ihres Geheimnisses. Beachten Sie, dass Secrets Manager nur X.509-Zertifikatsdateien im PEM-Format unterstützt. Weitere Informationen finden Sie unter Bereitgestelltes Zertifikat oder privater Schlüssel ist nicht gültig (Amazon MSK) oder Bereitgestelltes Zertifikat oder privater Schlüssel ist nicht gültig (Kafka).

„PROBLEM: Die bereitgestellten Kafka-Broker-Endpunkte können nicht aufgelöst werden.“

Der vorherige Fehler tritt auf, wenn Ihr ESM den Hostnamen nicht in eine IP-Adresse übersetzen kann.

Um diesen Fehler zu beheben, stellen Sie sicher, dass der ESM einen DNS-Server erreichen kann, der den Hostnamen übersetzen kann. Wenn sich der Hostname des Endpunkts in einem privaten Netzwerk befindet, konfigurieren Sie den ESM so, dass er eine VPC mit DNS-Einstellungen verwendet, die den Hostnamen auflösen können.

„PROBLEM: Der Server konnte Lambda nicht authentifizieren oder Lambda konnte den Server nicht authentifizieren“.

Der vorherige Fehler tritt auf, wenn der Server, mit dem Ihr ESM verbunden ist, nicht der Server ist, den Sie in den ESM-Einstellungen konfiguriert haben.

Um dieses Problem zu beheben, stellen Sie sicher, dass Sie die ESM-Einstellungen für den Server, zu dem Sie eine Verbindung herstellen, konfiguriert haben.

„PROBLEM: Die SASL-Authentifizierung ist fehlgeschlagen.“

Der vorherige Fehler tritt auf, wenn Ihr Server-Anmeldeversuch fehlschlägt.

AWS-Lambda-Funktionen, die von einem Amazon MSK-Thema ausgelöst werden, können auf Benutzernamen und Passwörter zugreifen, die von AWS Secrets Manager mithilfe von SASL/SCRAM gesichert sind. Sie erhalten eine Fehlermeldung, wenn Ihr Benutzername und Ihr Passwort nicht als gültig erkannt werden.

Um diesen Fehler zu beheben, melden Sie sich beim Broker an und überprüfen Sie die Zugriffsprotokolle.

Hinweis:

„PROBLEM: Der Cluster konnte Lambda nicht autorisieren.“

Der vorherige Fehler tritt auf, wenn sich der ESM beim Broker anmeldet, der ESM-Benutzer jedoch nicht berechtigt ist, Datensätze aus dem Thema abzurufen. Informationen zur Behebung dieses Problems finden Sie unter Cluster konnte Lambda nicht autorisieren (Amazon MSK) oder Cluster konnte Lambda nicht autorisieren (Kafka).


Ähnliche Informationen

Authentifizierungs- und Autorisierungsfehler

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr