Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden von Schemaregistern mit Kafka-Ereignisquellen in Lambda
Schemaregister helfen Ihnen bei der Definition und Verwaltung von Datenstromschemas. Ein Schema definiert die Struktur und das Format eines Datensatzes. Im Kontext von Kafka-Ereignisquellenzuordnungen können Sie eine Schemaregistrierung konfigurieren, um die Struktur und das Format von Kafka-Nachrichten anhand vordefinierter Schemas zu validieren, bevor sie Ihre Lambda-Funktion erreichen. Dies erweitert Ihre Anwendung um eine Ebene der Datenverwaltung und ermöglicht es Ihnen, Datenformate effizient zu verwalten, die Schemakonformität sicherzustellen und die Kosten durch Ereignisfilterung zu optimieren.
Diese Funktion funktioniert mit allen Programmiersprachen. Beachten Sie jedoch die folgenden wichtigen Punkte:
Powertools for Lambda bietet spezifische Unterstützung für Java, Python und TypeScript gewährleistet die Konsistenz mit bestehenden Kafka-Entwicklungsmustern und ermöglicht den direkten Zugriff auf Geschäftsobjekte ohne benutzerdefinierten Deserialisierungscode
Diese Funktion ist nur für Zuordnungen von Ereignisquellen im Bereitstellungsmodus verfügbar. Die Schemaregistrierung unterstützt keine Zuordnungen von Ereignisquellen im On-Demand-Modus. Wenn Sie den Bereitstellungsmodus verwenden und eine Schemaregistrierung konfiguriert haben, können Sie nicht in den On-Demand-Modus wechseln, es sei denn, Sie entfernen zuerst Ihre Schemaregistrierungskonfiguration. Weitere Informationen finden Sie unter Modus bereitgestellter Kapazität.
Sie können nur eine Schemaregistrierung pro Event Source Mapping (ESM) konfigurieren. Die Verwendung einer Schemaregistrierung mit Ihrer Kafka-Ereignisquelle kann Ihre Nutzung der Lambda Event Poller Unit (EPU) erhöhen, was eine Preisdimension für den Bereitstellungsmodus darstellt.
Themen
Optionen für die Schema-Registrierung
Lambda unterstützt die folgenden Schemaregistrierungsoptionen:
Ihre Schemaregistry unterstützt die Validierung von Nachrichten in den folgenden Datenformaten:
-
Apache Avro
-
Protokollpuffer (Protobuf)
-
JSON-Schema (JSON-SE)
Um eine Schemaregistrierung zu verwenden, stellen Sie zunächst sicher, dass sich Ihre Ereignisquellenzuordnung im Bereitstellungsmodus befindet. Wenn Sie eine Schemaregistrierung verwenden, fügt Lambda der Payload Metadaten über das Schema hinzu. Weitere Informationen finden Sie unter Payload-Formate und Deserialisierungsverhalten.
So führt Lambda die Schemavalidierung für Kafka-Nachrichten durch
Wenn Sie eine Schemaregistrierung konfigurieren, führt Lambda für jede Kafka-Nachricht die folgenden Schritte aus:
-
Lambda fragt den Kafka-Datensatz aus Ihrem Cluster ab.
-
Lambda validiert ausgewählte Nachrichtenattribute im Datensatz anhand eines bestimmten Schemas in Ihrer Schemaregistrierung.
-
Wenn das der Nachricht zugeordnete Schema nicht in der Registrierung gefunden wird, sendet Lambda die Nachricht mit dem Ursachencode an eine DLQ.
SCHEMA_NOT_FOUND
-
-
Lambda deserialisiert die Nachricht gemäß der Schemaregistrierungskonfiguration, um die Nachricht zu validieren. Wenn die Ereignisfilterung konfiguriert ist, führt Lambda dann eine Filterung auf der Grundlage der konfigurierten Filterkriterien durch.
-
Wenn die Deserialisierung fehlschlägt, sendet Lambda die Nachricht mit dem Ursachencode an eine DLQ.
DESERIALIZATION_ERROR
Wenn kein DLQ konfiguriert ist, löscht Lambda die Nachricht.
-
-
Wenn die Nachricht von der Schemaregistry validiert und nicht nach Ihren Filterkriterien herausgefiltert wird, ruft Lambda Ihre Funktion mit der Nachricht auf.
Diese Funktion dient zur Überprüfung von Nachrichten, die bereits mit Kafka-Clients erstellt wurden, die in eine Schemaregistrierung integriert sind. Wir empfehlen, Ihre Kafka-Producer so zu konfigurieren, dass sie mit Ihrer Schemaregistry zusammenarbeiten, um richtig formatierte Nachrichten zu erstellen.
Konfiguration einer Kafka-Schemaregistrierung
Mit den folgenden Konsolenschritten wird Ihrer Ereignisquellenzuordnung eine Kafka-Schema-Registrierungskonfiguration hinzugefügt.
So fügen Sie Ihrer Ereignisquellenzuordnung eine Kafka-Schemaregistrierungskonfiguration hinzu (Konsole)
-
Öffnen Sie die Seite Funktion
der Lambda-Konsole. -
Wählen Sie Konfiguration.
-
Wählen Sie Trigger.
-
Wählen Sie die Kafka-Ereignisquellenzuordnung aus, für die Sie eine Schemaregistrierung konfigurieren möchten, und klicken Sie auf Bearbeiten.
-
Wählen Sie unter Konfiguration des Event-Pollers die Option Schemaregistrierung konfigurieren aus. Ihre Ereignisquellenzuordnung muss sich im Bereitstellungsmodus befinden, damit diese Option angezeigt wird.
-
Geben Sie für Schema Registry URI den ARN Ihrer AWS Glue Schemaregistry oder die HTTPS-URL Ihrer Confluent Cloud-Schemaregistry oder Self-Managed Confluent Schema Registry ein.
-
Die folgenden Konfigurationsschritte teilen Lambda mit, wie auf Ihre Schemaregistrierung zugegriffen werden kann. Weitere Informationen finden Sie unter Authentifizierungsmethoden für Ihre Schemaregistry.
-
Wählen Sie unter Zugriffskonfigurationstyp den Authentifizierungstyp aus, den Lambda für den Zugriff auf Ihre Schemaregistrierung verwendet.
-
Geben Sie für Access Configuration URI den ARN des Secrets Manager Manager-Geheimnisses ein, um sich bei Ihrer Schemaregistry zu authentifizieren, falls zutreffend. Stellen Sie sicher, dass die Ausführungsrolle Ihrer Funktion die richtigen Berechtigungen enthält.
-
-
Das Feld Verschlüsselung gilt nur, wenn Ihre Schemaregistrierung von einer privaten Zertifizierungsstelle (CA) oder einer Zertifizierungsstelle (CA) signiert ist, die sich nicht im Lambda Trust Store befindet. Geben Sie gegebenenfalls den geheimen Schlüssel an, der das private CA-Zertifikat enthält, das von Ihrer Schemaregistrierung für die TLS-Verschlüsselung verwendet wird.
-
Wählen Sie unter Format für Ereignisdatensätze aus, wie Lambda die Datensätze Ihrer Funktion nach der Schemavalidierung liefern soll. Weitere Informationen finden Sie unter Beispiele für das Payload-Format.
-
Wenn Sie JSON wählen, liefert Lambda die Attribute, die Sie unten im Schemavalidierungsattribut auswählen, im Standard-JSON-Format. Für die Attribute, die Sie nicht auswählen, liefert Lambda sie unverändert.
-
Wenn Sie SOURCE wählen, liefert Lambda die Attribute, die Sie unten im Schemavalidierungsattribut auswählen, in ihrem ursprünglichen Quellformat.
-
-
Wählen Sie unter Schemavalidierungsattribut die Nachrichtenattribute aus, die Lambda mithilfe Ihrer Schemaregistrierung validieren und deserialisieren soll. Sie müssen mindestens eines der Werte KEY oder VALUE auswählen. Wenn Sie JSON als Ereignisdatensatzformat ausgewählt haben, deserialisiert Lambda auch die ausgewählten Nachrichtenattribute, bevor sie an Ihre Funktion gesendet werden. Weitere Informationen finden Sie unter Payload-Formate und Deserialisierungsverhalten.
-
Wählen Sie Speichern.
Sie können die Lambda-API auch verwenden, um Ihre Ereignisquellenzuordnung mit einer Schemaregistrierungskonfiguration zu erstellen oder zu aktualisieren. Die folgenden Beispiele zeigen, wie Sie eine AWS Glue oder Confluent-Schemaregistry mithilfe der konfigurieren AWS CLI, was den CreateEventSourceMappingAPI-Operationen UpdateEventSourceMappingund in der AWS Lambda API-Referenz entspricht:
Wichtig
Wenn Sie ein Konfigurationsfeld für die Schemaregistrierung mithilfe der AWS CLI oder der update-event-source-mapping
API aktualisieren, müssen Sie alle Felder der Schemaregistrierungskonfiguration aktualisieren.
Filterung nach Avro und Protobuf
Wenn Sie die Formate Avro oder Protobuf mit einer Schemaregistrierung verwenden, können Sie die Ereignisfilterung auf Ihre Lambda-Funktion anwenden. Die Filtermuster werden nach der Schemavalidierung auf die deserialisierte klassische JSON-Darstellung Ihrer Daten angewendet. Wenn Sie beispielsweise ein Avro-Schema verwenden, das Produktdetails einschließlich des Preises definiert, können Sie Nachrichten anhand des Preiswerts filtern:
Anmerkung
Bei der Deserialisierung wird Avro in Standard-JSON konvertiert, was bedeutet, dass es nicht direkt wieder in ein Avro-Objekt konvertiert werden kann. Wenn Sie in ein Avro-Objekt konvertieren müssen, verwenden Sie stattdessen das SOURCE-Format.
Bei der Protobuf-Deserialisierung stimmen die Feldnamen in der resultierenden JSON-Datei mit denen überein, die in Ihrem Schema definiert sind, und werden nicht, wie es bei Protobuf normalerweise der Fall ist, in Camel-Groß- und Kleinschreibung konvertiert. Beachten Sie dies bei der Erstellung von Filtermustern.
aws lambda create-event-source-mapping \ --function-name myAvroFunction \ --topics myAvroTopic \ --starting-position TRIM_HORIZON \ --kafka-bootstrap-servers '["broker1:9092", "broker2:9092"]' \ --schema-registry-config '{ "SchemaRegistryURI": "arn:aws:glue:us-east-1:123456789012:registry/myAvroRegistry", "EventRecordFormat": "JSON", "SchemaValidationConfigs": [ { "Attribute": "VALUE" } ] }' \ --filter-criteria '{ "Filters": [ { "Pattern": "{ \"value\" : { \"field_1\" : [\"value1\"], \"field_2\" : [\"value2\"] } }" } ] }'
In diesem Beispiel analysiert das Filtermuster das value
Objekt und ordnet Nachrichten field_1
mit "value1"
und field_2
mit zu"value2"
. Die Filterkriterien werden anhand der deserialisierten Daten ausgewertet, nachdem Lambda die Nachricht vom Avro-Format in das JSON-Format konvertiert hat.
Ausführlichere Informationen zur Ereignisfilterung finden Sie unter Lambda-Ereignisfilterung.
Payload-Formate und Deserialisierungsverhalten
Wenn Sie eine Schemaregistrierung verwenden, liefert Lambda die endgültige Nutzlast an Ihre Funktion in einem Format, das der regulären Event-Payload ähnelt, mit einigen zusätzlichen Feldern. Die zusätzlichen Felder hängen vom Parameter ab. SchemaValidationConfigs
Für jedes Attribut, das Sie für die Validierung auswählen (Schlüssel oder Wert), fügt Lambda der Payload entsprechende Schema-Metadaten hinzu.
Anmerkung
Sie müssen Ihr System aws-lambda-java-events
Wenn Sie beispielsweise das value
Feld validieren, fügt Lambda Ihrer Payload ein valueSchemaMetadata
aufgerufenes Feld hinzu. In ähnlicher Weise fügt Lambda für das key
Feld ein Feld namens keySchemaMetadata
hinzu. Diese Metadaten enthalten Informationen über das Datenformat und die für die Validierung verwendete Schema-ID:
"valueSchemaMetadata": { "dataFormat": "AVRO", "schemaId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }
Der EventRecordFormat
Parameter kann entweder auf JSON
oder gesetzt werdenSOURCE
, was bestimmt, wie Lambda mit schemavalidierten Daten umgeht, bevor sie an Ihre Funktion übergeben werden. Jede Option bietet unterschiedliche Verarbeitungsmöglichkeiten:
-
JSON
- Lambda deserialisiert die validierten Attribute in das Standard-JSON-Format und macht die Daten so für die direkte Verwendung in Sprachen mit nativer JSON-Unterstützung bereit. Dieses Format ist ideal, wenn Sie das ursprüngliche Binärformat nicht beibehalten oder mit generierten Klassen arbeiten müssen. -
SOURCE
- Lambda behält das ursprüngliche Binärformat der Daten als Base64-kodierte Zeichenfolge bei und ermöglicht so eine direkte Konvertierung in Avro- oder Protobuf-Objekte. Dieses Format ist wichtig, wenn Sie mit stark typisierten Sprachen arbeiten oder wenn Sie den vollen Funktionsumfang von Avro- oder Protobuf-Schemas beibehalten müssen.
Basierend auf diesen Formatmerkmalen und sprachspezifischen Überlegungen empfehlen wir die folgenden Formate:
Sprache | Avro | Protobuf | JSON |
---|---|---|---|
Java | SOURCE | SOURCE | SOURCE |
Python | JSON | JSON | JSON |
NodeJS | JSON | JSON | JSON |
.NET | SOURCE | SOURCE | SOURCE |
Weitere | JSON | JSON | JSON |
In den folgenden Abschnitten werden diese Formate detailliert beschrieben und es werden Beispielnutzlasten für jedes Format bereitgestellt.
JSON-Format
Wenn Sie dies wählen JSON
EventRecordFormat
, validiert und deserialisiert Lambda die Nachrichtenattribute, die Sie in dem SchemaValidationConfigs
Feld ausgewählt haben (die Attribute). key
and/or value
Lambda liefert diese ausgewählten Attribute als Base64-kodierte Zeichenfolgen ihrer Standard-JSON-Darstellung in Ihrer Funktion.
Anmerkung
Bei der Deserialisierung wird Avro in Standard-JSON konvertiert, was bedeutet, dass es nicht direkt wieder in ein Avro-Objekt konvertiert werden kann. Wenn Sie in ein Avro-Objekt konvertieren müssen, verwenden Sie stattdessen das SOURCE-Format.
Bei der Protobuf-Deserialisierung stimmen die Feldnamen in der resultierenden JSON-Datei mit denen überein, die in Ihrem Schema definiert sind, und werden nicht, wie es bei Protobuf normalerweise der Fall ist, in Camel-Groß- und Kleinschreibung konvertiert. Beachten Sie dies bei der Erstellung von Filtermustern.
Im Folgenden finden Sie ein Beispiel für eine Payload, wobei davon ausgegangen wirdEventRecordFormat
, dass Sie sowohl das JSON
als als als auch das key
value
Attribut als SchemaValidationConfigs
wählen:
{ "eventSource":"aws:kafka", "eventSourceArn":"arn:aws:kafka:us-east-1:123456789012:cluster/vpc-2priv-2pub/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111-1", "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", "records":{ "mytopic-0":[ { "topic":"mytopic", "partition":0, "offset":15, "timestamp":1545084650987, "timestampType":"CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", //Base64 encoded string of JSON "keySchemaMetadata": { "dataFormat": "AVRO", "schemaId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }, "value":"abcDEFghiJKLmnoPQRstuVWXyz1234", //Base64 encoded string of JSON "valueSchemaMetadata": { "dataFormat": "AVRO", "schemaId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }, "headers":[ { "headerKey":[ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ] } }
In diesem Beispiel:
-
Beide
key
undvalue
sind Base64-kodierte Zeichenketten ihrer JSON-Repräsentation nach der Deserialisierung. -
Lambda enthält Schema-Metadaten für beide Attribute in
keySchemaMetadata
undvalueSchemaMetadata
. -
Ihre Funktion kann die
value
Zeichenkettenkey
und dekodieren, um auf die deserialisierten JSON-Daten zuzugreifen.
Das JSON-Format wird für Sprachen empfohlen, die nicht stark typisiert sind, wie Python oder Node.js. Diese Sprachen bieten native Unterstützung für die Konvertierung von JSON in Objekte.
Quellformat
Wenn Sie dies wählen SOURCE
EventRecordFormat
, validiert Lambda den Datensatz trotzdem anhand der Schemaregistrierung, liefert jedoch die ursprünglichen Binärdaten ohne Deserialisierung an Ihre Funktion. Diese Binärdaten werden als Base64-kodierte Zeichenfolge der ursprünglichen Bytedaten geliefert, wobei die vom Hersteller angehängten Metadaten entfernt werden. Dadurch können Sie die rohen Binärdaten innerhalb Ihres Funktionscodes direkt in Avro- und Protobuf-Objekte konvertieren. Wir empfehlen die Verwendung von Powertools for AWS Lambda, das die rohen Binärdaten deserialisiert und Ihnen Avro- und Protobuf-Objekte direkt zur Verfügung stellt.
Wenn Sie Lambda beispielsweise so konfigurieren, dass es key
sowohl die value
Attribute als auch validiert, aber das SOURCE
Format verwendet, erhält Ihre Funktion eine Nutzlast wie die folgende:
{ "eventSource": "aws:kafka", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/vpc-2priv-2pub/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111-1", "bootstrapServers": "b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", "records": { "mytopic-0": [ { "topic": "mytopic", "partition": 0, "offset": 15, "timestamp": 1545084650987, "timestampType": "CREATE_TIME", "key": "abcDEFghiJKLmnoPQRstuVWXyz1234==", // Base64 encoded string of Original byte data, producer-appended metadata removed "keySchemaMetadata": { "dataFormat": "AVRO", "schemaId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }, "value": "abcDEFghiJKLmnoPQRstuVWXyz1234==", // Base64 encoded string of Original byte data, producer-appended metadata removed "valueSchemaMetadata": { "dataFormat": "AVRO", "schemaId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }, "headers": [ { "headerKey": [ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ] } }
In diesem Beispiel:
-
Beide
key
undvalue
enthalten die ursprünglichen Binärdaten als Base64-kodierte Zeichenketten. -
Ihre Funktion muss die Deserialisierung mithilfe der entsprechenden Bibliotheken handhaben.
EventRecordFormat
Es wird empfohlen, SOURCE
für zu wählen, wenn Sie von Avro oder ProtoBuf generierte Objekte verwenden, insbesondere bei Java-Funktionen. Das liegt daran, dass Java stark typisiert ist und spezielle Deserialisierer für die Formate Avro und Protobuf benötigt. In Ihrem Funktionscode können Sie Ihre bevorzugte Avro- oder Protobuf-Bibliothek verwenden, um die Daten zu deserialisieren.
Arbeiten mit deserialisierten Daten in Lambda-Funktionen
Powertools for AWS Lambda hilft Ihnen dabei, Kafka-Datensätze in Ihrem Funktionscode auf der Grundlage des von Ihnen verwendeten Formats zu deserialisieren. Dieses Tool vereinfacht die Arbeit mit Kafka-Datensätzen, indem es die Datenkonvertierung übernimmt und Objekte bereitstellt. ready-to-use
Um Powertools for AWS Lambda in Ihrer Funktion zu verwenden, müssen Sie Powertools for AWS Lambda entweder als Ebene oder als Abhängigkeit hinzufügen, wenn Sie Ihre Lambda-Funktion erstellen. Anweisungen zur Einrichtung und weitere Informationen finden Sie in der AWS Lambda Powertools-Dokumentation für Ihre bevorzugte Sprache:
Anmerkung
Wenn Sie mit der Schemaregistrierungsintegration arbeiten, können Sie JSON
das Format wählenSOURCE
. Jede Option unterstützt unterschiedliche Serialisierungsformate, wie unten dargestellt:
Format | Unterstützt |
---|---|
SOURCE |
Avro und Protobuf (unter Verwendung der Lambda Schema Registry-Integration) |
JSON |
JSON-Daten |
Wenn Sie das JSON
Format SOURCE
oder verwenden, können Sie Powertools for verwenden, um die Daten in Ihrem AWS Funktionscode zu deserialisieren. Hier sind Beispiele für den Umgang mit verschiedenen Datenformaten:
Authentifizierungsmethoden für Ihre Schemaregistry
Um eine Schemaregistrierung verwenden zu können, muss Lambda in der Lage sein, sicher darauf zuzugreifen. Wenn Sie mit einer AWS Glue Schemaregistrierung arbeiten, stützt sich Lambda auf die IAM-Authentifizierung. Das bedeutet, dass die Ausführungsrolle Ihrer Funktion über die folgenden Berechtigungen für den Zugriff auf die AWS Glue Registrierung verfügen muss:
-
GetRegistryin der AWS Glue Web-API-Referenz
-
GetSchemaVersionin der AWS Glue Web-API-Referenz
Beispiel für die erforderliche IAM-Richtlinie:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetRegistry", "glue:GetSchemaVersion" ], "Resource": [ "*" ] } ] }
Anmerkung
Wenn Sie bei AWS Glue Schemaregistern eine AWS Glue Registrierung angebenAccessConfigs
, gibt Lambda eine Validierungsausnahme zurück.
Wenn Sie mit einer Confluent-Schemaregistry arbeiten, können Sie eine von drei unterstützten Authentifizierungsmethoden für den Type
Parameter Ihres Objekts wählen: KafkaSchemaRegistryAccessConfig
-
BASIC_AUTH — Lambda verwendet Benutzername und Passwort oder API-Schlüssel- und API-Secret-Authentifizierung, um auf Ihre Registrierung zuzugreifen. Wenn Sie diese Option wählen, geben Sie den Secrets Manager Manager-ARN mit Ihren Anmeldeinformationen in das URI-Feld ein.
-
CLIENT_CERTIFICATE_TLS_AUTH — Lambda verwendet die gegenseitige TLS-Authentifizierung mit Client-Zertifikaten. Um diese Option verwenden zu können, benötigt Lambda Zugriff sowohl auf das Zertifikat als auch auf den privaten Schlüssel. Geben Sie den Secrets Manager Manager-ARN, der diese Anmeldeinformationen enthält, in das URI-Feld ein.
-
NO_AUTH — Das öffentliche CA-Zertifikat muss von einer Zertifizierungsstelle (CA) signiert werden, die sich im Lambda Trust Store befindet. Für ein privates CA/ein selbstsigniertes Zertifikat konfigurieren Sie das Root-CA-Zertifikat des Servers. Um diese Option zu verwenden, lassen Sie den Parameter weg.
AccessConfigs
Wenn Lambda Zugriff auf ein privates CA-Zertifikat benötigt, um das TLS-Zertifikat Ihrer Schemaregistry zu verifizieren, wählen Sie außerdem SERVER_ROOT_CA_CERT
als Type
und geben Sie den Secrets Manager Manager-ARN für das Zertifikat im URI-Feld an.
Anmerkung
Um die SERVER_ROOT_CA_CERT
Option in der Konsole zu konfigurieren, geben Sie den geheimen ARN, der das Zertifikat enthält, in das Feld Verschlüsselung ein.
Die Authentifizierungskonfiguration für Ihre Schemaregistrierung ist unabhängig von der Authentifizierung, die Sie für Ihren Kafka-Cluster konfiguriert haben. Sie müssen beide separat konfigurieren, auch wenn sie ähnliche Authentifizierungsmethoden verwenden.
Fehlerbehandlung und Problembehandlung bei Problemen mit der Schemaregistrierung
Wenn Sie eine Schemaregistrierung mit Ihrer Amazon MSK-Ereignisquelle verwenden, können verschiedene Fehler auftreten. Dieser Abschnitt enthält Anleitungen zu häufig auftretenden Problemen und deren Behebung.
Konfigurationsfehler
Diese Fehler treten auf, wenn Sie Ihre Schemaregistrierungskonfiguration einrichten.
- Bereitgestellter Modus erforderlich
-
Fehlermeldung:
SchemaRegistryConfig is only available for Provisioned Mode. To configure Schema Registry, please enable Provisioned Mode by specifying MinimumPollers in ProvisionedPollerConfig.
Lösung: Aktivieren Sie den Bereitstellungsmodus für Ihre Ereignisquellenzuordnung, indem Sie den
MinimumPollers
Parameter in konfigurieren.ProvisionedPollerConfig
- Ungültige URL der Schemaregistrierung
-
Fehlermeldung:
Malformed SchemaRegistryURI provided. Please provide a valid URI or ARN. For example, https://schema-registry.example.com:8081 or arn:aws:glue:us-east-1:123456789012:registry/ExampleRegistry.
Lösung: Geben Sie eine gültige HTTPS-URL für Confluent Schema Registry oder einen gültigen ARN für AWS Glue Schema Registry an.
- Ungültiges oder fehlendes Format der Ereignisdatensätze
-
Fehlermeldung:
EventRecordFormat is a required field for SchemaRegistryConfig. Please provide one of supported format types: SOURCE, JSON.
Lösung: Geben Sie EventRecordFormat in Ihrer Schemaregistrierungskonfiguration entweder SOURCE oder JSON an.
- Doppelte Validierungsattribute
-
Fehlermeldung:
Duplicate KEY/VALUE Attribute in SchemaValidationConfigs. SchemaValidationConfigs must contain at most one KEY/VALUE Attribute.
Lösung: Entfernen Sie doppelte KEY- oder VALUE-Attribute aus Ihrem SchemaValidationConfigs. Jeder Attributtyp kann nur einmal vorkommen.
- Fehlende Validierungskonfiguration
-
Fehlermeldung:
SchemaValidationConfigs is a required field for SchemaRegistryConfig.
Lösung: Fügen Sie Ihre Konfiguration SchemaValidationConfigs hinzu und geben Sie mindestens ein Validierungsattribut (KEY oder VALUE) an.
Zugriffs- und Berechtigungsfehler
Diese Fehler treten auf, wenn Lambda aufgrund von Berechtigungs- oder Authentifizierungsproblemen nicht auf die Schemaregistrierung zugreifen kann.
- AWS Glue Zugriff auf die Schemaregistrierung verweigert
-
Fehlermeldung:
Cannot access Glue Schema with provided role. Please ensure the provided role can perform the GetRegistry and GetSchemaVersion Actions on your schema.
Lösung: Fügen Sie der Ausführungsrolle Ihrer Funktion die erforderlichen Berechtigungen (
glue:GetRegistry
undglue:GetSchemaVersion
) hinzu. - Zugriff auf die Confluent Schema Registry verweigert
-
Fehlermeldung:
Cannot access Confluent Schema with the provided access configuration.
Lösung: Stellen Sie sicher, dass Ihre (in Secrets Manager gespeicherten) Authentifizierungsdaten korrekt sind und über die erforderlichen Berechtigungen für den Zugriff auf die Schemaregistrierung verfügen.
- Kontenübergreifende AWS Glue Schemaregistrierung
-
Fehlermeldung:
Cross-account Glue Schema Registry ARN not supported.
Lösung: Verwenden Sie eine AWS Glue Schemaregistry, die sich im selben AWS Konto wie Ihre Lambda-Funktion befindet.
- Regionsübergreifende Schemaregistrierung AWS Glue
-
Fehlermeldung:
Cross-region Glue Schema Registry ARN not supported.
Lösung: Verwenden Sie eine AWS Glue Schemaregistry, die sich in derselben Region wie Ihre Lambda-Funktion befindet.
- Probleme mit dem geheimen Zugriff
-
Fehlermeldung:
Lambda received InvalidRequestException from Secrets Manager.
Lösung: Stellen Sie sicher, dass die Ausführungsrolle Ihrer Funktion berechtigt ist, auf das Geheimnis zuzugreifen, und dass das Geheimnis nicht mit einem AWS KMS Standardschlüssel verschlüsselt ist, wenn der Zugriff von einem anderen Konto aus erfolgt.
Verbindungsfehler
Diese Fehler treten auf, wenn Lambda keine Verbindung zur Schemaregistrierung herstellen kann.
- VPC-Verbindungsprobleme
-
Fehlermeldung:
Cannot connect to your Schema Registry. Your Kafka cluster's VPC must be able to connect to the schema registry. You can provide access by configuring AWS PrivateLink or a NAT Gateway or VPC Peering between Kafka Cluster VPC and the schema registry VPC.
Lösung: Konfigurieren Sie Ihr VPC-Netzwerk so, dass Verbindungen zur Schemaregistry über AWS PrivateLink ein NAT-Gateway oder VPC-Peering möglich sind.
- TLS-Handshake-Fehler
-
Fehlermeldung:
Unable to establish TLS handshake with the schema registry. Please provide correct CA-certificate or client certificate using Secrets Manager to access your schema registry.
Lösung: Stellen Sie sicher, dass Ihre CA-Zertifikate und Client-Zertifikate (für mTLs) korrekt und ordnungsgemäß in Secrets Manager konfiguriert sind.
- Drosselung
-
Fehlermeldung:
Receiving throttling errors when accessing the schema registry. Please increase API TPS limits for your schema registry.
Lösung: Erhöhen Sie die API-Ratenlimits für Ihre Schemaregistry oder reduzieren Sie die Anzahl der Anfragen von Ihrer Anwendung.
- Fehler in der selbst verwalteten Schemaregistrierung
-
Fehlermeldung:
Lambda received an internal server an unexpected error from the provided self-managed schema registry.
Lösung: Überprüfen Sie den Zustand und die Konfiguration Ihres selbstverwalteten Schemaregistrierungsservers.