Wie kann ich Integrationsprobleme mit Lambda Kinesis Firehose beheben?

Lesedauer: 6 Minute
0

Ich habe AWS Lambda mit Amazon Kinesis Data Firehose integriert, um eingehende Quelldaten zu transformieren und die transformierten Daten an Ziele zu liefern. Die Lambda-Funktion wurde jedoch nicht aufgerufen oder ist fehlgeschlagen.

Kurze Beschreibung

Mit Amazon Kinesis Data Firehose konfigurierte Lambda-Funktionen können aus folgenden Gründen fehlschlagen:

  • Unzureichende AWS Identity and Access Management (IAM)-Berechtigungen
  • Lambda-Dauer, die das maximal zulässige Timeout überschreitet
  • Lambda-Drosselung
  • Fehler bei der Datentransformation
  • Lambda-Funktionsfehler

Hinweis: Wenn Ihr Lambda-Funktionsaufruf ein Netzwerk-Timeout hat oder fehlschlägt, weil Sie das Aufruflimit, erreicht haben versucht Kinesis Data Firehose den Aufruf dreimal. Weitere Informationen finden Sie unter Fehlerbehandlung bei der Datentransformation.

Auflösung

Wenn Sie dies noch nicht getan haben, aktivieren Sie die Amazon CloudWatch-Protokollierung für Ihre Kinesis Data Firehose. Sie können die spezifischen Fehlerprotokolle einsehen, wenn der Lambda-Aufruf für die Datentransformation oder Datenlieferung fehlschlägt. Sie können die Kinesis Data Firehose-Fehlerprotokollierung aktivieren, wenn Sie Ihren Lieferstream erstellen. Das Format des Protokollgruppennamens ist /aws/kinesisfirehose/delivery-stream-name. Der delivery-stream-name ist der Name des Delivery Streams.

Um herauszufinden, warum die Lambda-Funktion fehlgeschlagen ist, suchen Sie in der Amazon CloudWatch Logs-Gruppe nach**/aws/lambda/lambda-function-name**. Datensätze zur fehlgeschlagenen Datentransformation werden als Backup im Ordner mit Verarbeitungsfehlern an den Amazon Simple Storage Service (Amazon S3)-Bucket übermittelt. Die Datensätze in Ihrem S3-Bucket enthalten auch die Fehlermeldung für einen fehlgeschlagenen Aufruf. Weitere Informationen zum Beheben von Lambda-Aufruffehlern finden Sie unter Fehlerbehandlung bei der Datentransformation.

Unzureichende IAM-Berechtigungen

"AssumeRoleAccessDenied - Access was denied. Ensure that the trust policy for the provided IAM role allows Kinesis Data Firehose to assume the role." (AssumeRoleAccessDenied – Zugriff wurde verweigert. Stellen Sie sicher, dass die Vertrauensrichtlinie für die angegebene IAM-Rolle Kinesis Data Firehose die Übernahme der Rolle ermöglicht.)

Dieser Fehler tritt auf, wenn die Amazon Kinesis Data Firehose IAM-Rolle „firehose.amazonaws.com“ nicht annehmen darf. Vergewissern Sie sich, dass die IAM-Vertrauensrichtlinie berechtigt ist, „firehose.amazonaws.com“ anzunehmen, die der folgenden ähneln:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com"
      },
     "Action": "sts:AssumeRole"
    }
  ]
}

"InvokeAccessDenied - Access was denied. Ensure that the access policy allows access to the Lambda function." (InvokeAccessDenied – Der Zugriff wurde verweigert. Stellen Sie sicher, dass die Zugriffsrichtlinie den Zugriff auf die Lambda-Funktion ermöglicht.)

Dieser Fehler tritt auf, wenn die IAM-Rolle Amazon Kinesis Data Firehose nicht berechtigt ist, die für die Datentransformation verwendete Lambda-Funktion aufzurufen. Stellen Sie sicher, dass die IAM-Richtlinie es Amazon Kinesis Data Firehose ermöglicht, die Lambda-Funktion ähnlich der folgenden aufzurufen:

Hinweis: Ersetzen Sie die Ressource ARN in diesem Beispiel durch Ihre Variablen.

{
  "Effect": "Allow",
  "Action": [
    "lambda:InvokeFunction",
    "lambda:GetFunctionConfiguration"
  ],
  "Resource": [
    "arn:aws:lambda:region:account-id:function:function-name:function-version"
  ]
}

Lambda-Dauer, die das maximal zulässige Timeout überschreitet

"Firehose encountered timeout errors when calling AWS Lambda. The maximum supported function timeout is 5 minutes." (Firehose ist beim Aufrufen von AWS Lambda auf Timeout-Fehler gestoßen. Das maximale Timeout für unterstützte Funktionen beträgt 5 Minuten.)

Dieser Fehler tritt auf, wenn die Ausführung der Lambda-Funktion länger als 5 Minuten dauert. Informationen zur Behebung von Timeout-Fehlern bei Lambda-Funktionen mit Kinesis Data Firehose finden Sie unter Fehlerbehandlung bei der Datentransformation.

Lambda-Drosselung

"InvokeLimitExceeded - The Lambda concurrent execution limit is exceeded. Increase the concurrent execution limit." (InvokeLimitExceeded – Das Limit für die gleichzeitige Lambda-Ausführung wurde überschritten. Erhöhen Sie das Limit für gleichzeitige Ausführung.)

Dieser Fehler tritt auf, wenn das Limit für die gleichzeitige Ausführung von Lambda überschritten wird. Überprüfen Sie die Lambda-Parallelitätsmetriken in den CloudWatch-Protokollen, um Ihre Nutzung zu ermitteln. Informationen zum Beantragen einer Erhöhung für gleichzeitige Ausführungen finden Sie unter Kontingenterhöhung beantragen.

Weitere Informationen finden Sie unter Skalierung von Lambda-Funktionen und Wie behebe ich die Drosselung von Lambda-Funktionen mit den Fehlern „Rate exceeded“ (Rate überschritten) und 429 „TooManyRequestsException“?

Fehler bei der Datentransformation

"JsonProcessingException - There was an error parsing returned records from the Lambda function. Ensure that the returned records follow the status model required by Kinesis Data Firehose." (JsonProcessingException – Beim Analysieren der zurückgegebenen Datensätze der Lambda-Funktion ist ein Fehler aufgetreten. Stellen Sie sicher, dass die zurückgegebenen Datensätze dem von Kinesis Data Firehose geforderten Statusmodell entsprechen.)

Dieser Fehler tritt auf, wenn die von Lambda zurückgegebenen transformierten Datensätze nicht das erforderliche Format haben. Alle transformierten Datensätze, die von Lambda zurückgegeben werden, müssen die Parameter recordId, result, und data enthalten. Überprüfen Sie den Lambda-Funktionscode und die CloudWatch-Protokolle, um sicherzustellen, dass diese Datensätze diese Parameter enthalten.

Hinweis: Um einen Datensatz absichtlich zu löschen, setzen Sie den Wert auf Dropped (Verwerfen).

Weitere Informationen finden Sie unter Datentransformation und Statusmodell.

"DuplicatedRecordId - Multiple records were returned with the same record ID. Ensure that the Lambda function returns unique record IDs for each record." (DuplicatedRecordId – Es wurden mehrere Datensätze mit derselben Datensatz-ID zurückgegeben. Stellen Sie sicher, dass die Lambda-Funktion für jeden Datensatz eindeutige Datensatz-IDs zurückgibt.)

Dieser Fehler tritt auf, wenn mehrere transformierte Datensätze, die von der Lambda-Funktion an Kinesis Firehose zurückgegeben werden, dieselbe Datensatz-ID haben. Die Datensatz-ID wird während des Funktionsaufrufs von Kinesis Data Firehose an Lambda übergeben. Überprüfen Sie den Lambda-Funktionscode und die CloudWatch-Protokolle, um sicherzustellen, dass jede Datensatz-ID eindeutig ist.

Lambda-Funktionsfehler

"The Lambda function was successfully invoked but it returned an error result." (Die Lambda-Funktion wurde erfolgreich aufgerufen, hat jedoch ein Fehlerergebnis zurückgegeben.)

Dieser Fehler tritt auf, wenn Amazon Kinesis Data Firehose die Lambda-Funktion erfolgreich aufrufen konnte, die Ausführung der Lambda-Funktion jedoch aufgrund eines Fehlers fehlschlug. Überprüfen Sie die CloudWatch-Metriken zur Datentransformation, um zu bestätigen, dass Kinesis Data Firehose Ihre Funktion aufgerufen hat.

Wenn Kinesis Data Firehose Ihre Lambda-Funktion nicht aufgerufen hat, überprüfen Sie die Aufrufzeit, um festzustellen, ob sie den Timeout-Parameter überschreitet. Ihre Lambda-Funktion benötigt möglicherweise einen höheren Timeout-Wert oder benötigt mehr Speicher, um sie abzuschließen. Weitere Informationen zu Aufrufmetriken finden Sie unterAufrufmetriken.

"Exceeded maximum allowed payload size” or “LAMBDA_RUNTIME Failed to post handler success response. Http response code: 413.“ (Die maximal zulässige Nutzdatengröße wurde überschritten“ oder „LAMBDA\ _RUNTIME Fehler beim Versenden der Erfolgsantwort für den Handler. HTTP-Antwortcode: 413.)

Amazon Kinesis Data Firehose ruft synchron eine Lambda-Funktion auf, und das Payload-Limit für Aufrufe beträgt 6 MB für jede Anfrage und Antwort. Das Lambda-Payload-Limit ist ein hartes Limit und kann nicht erhöht werden. Stellen Sie sicher, dass die Puffergröße für jede Anfrage und Antwort 6 MB nicht überschreitet.

Weitere Informationen finden Sie unter Lambda-Kontingente.

Verwandte Informationen

Warum tritt bei Kinesis Data Firehose ein Fehler bei der Datenlieferung auf?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr