¿Cómo puedo solucionar los problemas de integración de Lambda Kinesis Firehose?

7 minutos de lectura
0

He integrado AWS Lambda con Amazon Kinesis Data Firehose para transformar los datos de origen entrantes y entregar los datos transformados a los destinos. Sin embargo, la función de Lambda no se invocó o falló.

Descripción breve

Las funciones de Lambda configuradas con Amazon Kinesis Data Firehose pueden fallar debido a:

  • Permisos insuficientes de AWS Identity y Access Management (IAM)
  • Duración de Lambda superior al tiempo de espera máximo permitido
  • Limitación de Lambda
  • Errores de transformación de datos
  • Errores de la función de Lambda

Nota: Si la invocación de la función de Lambda tiene un tiempo de espera de red o se produce un error porque ha alcanzado el límite de invocación, Kinesis Data Firehose vuelve a intentar la invocación tres veces. Para obtener más información, consulte Gestión de errores de transformación de datos.

Resolución

Si aún no lo ha hecho, active el registro de Amazon CloudWatch para su Kinesis Data Firehose. Puede ver los registros de errores específicos cuando se produce un error en la invocación de Lambda para la transformación o la entrega de datos. Puede activar el registro de errores de Kinesis Data Firehose al crear su transmisión de entrega. El formato del nombre del grupo de registro es /aws/kinesisfirehose/delivery-stream-name. El delivery-stream-name es el nombre de la transmisión de entrega.

Para identificar por qué falló la función de Lambda, consulte /aws/lambda/lambda-function-name en el grupo de Registros de Amazon CloudWatch. Los registros de transformación de datos fallidos se entregan al bucket de Amazon Simple Storage Service (Amazon S3) como backup en la carpeta processing-failed (errores de procesamiento). Los registros del bucket de S3 también contienen el mensaje de error de la invocación fallida. Para obtener más información sobre la resolución de errores de invocación de Lambda, consulte Gestión de errores de transformación de datos.

Permisos de IAM insuficientes

«AssumeRoleAccessDenied - Access was denied. Ensure that the trust policy for the provided IAM role allows Kinesis Data Firehose to assume the role» (Acceso denegado. Asegúrese de que la política de confianza para la función de IAM proporcionada permita que Kinesis Data Firehose asuma el rol).

Este error se produce cuando el rol de IAM de Amazon Kinesis Data Firehose no puede asumir «firehose.amazonaws.com». Asegúrese de que la política de confianza de IAM tenga permisos para asumir que «firehose.amazonaws.com» es similar al siguiente:

{
  "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» (Acceso denegado. Asegúrese de que la política de acceso permita el acceso a la función de Lambda).

Este error se produce cuando el rol de IAM de Amazon Kinesis Data Firehose no tiene permiso para invocar la función de Lambda utilizada para la transformación de datos. Asegúrese de que la política de IAM permita a Amazon Kinesis Data Firehose invocar la función de Lambda de forma similar a la siguiente:

Nota: Reemplace el ARN del recurso en este ejemplo por sus variables.

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

Duración de Lambda superior al tiempo de espera máximo permitido

«Firehose encountered timeout errors when calling AWS Lambda. The maximum supported function timeout is 5 minutes» (Firehose detectó errores de tiempo de espera al llamar a AWS Lambda. El tiempo máximo de espera admitido de la función es de 5 minutos).

Este error se produce cuando la función de Lambda tarda más de 5 minutos en completarse. Para solucionar los errores de tiempo de espera de la función de Lambda con Kinesis Data Firehose, consulte Gestión de errores de transformación de datos.

Limitación de Lambda

«InvokeLimitExceeded - The Lambda concurrent execution limit is exceeded. Increase the concurrent execution limit» (Se ha superado el límite de ejecución simultánea de Lambda. Aumente el límite de ejecución simultánea).

Este error se produce cuando se supera el límite de ejecución simultánea de Lambda. Revise las métricas de concurrencia de Lambda en los registros de CloudWatch para determinar su uso. Para solicitar un aumento de la ejecución simultánea, consulte Solicitud de aumento de cuota.

Para obtener más información, consulte Escalar funciones de Lambda y ¿Cómo soluciono los problemas de limitación de la función de Lambda con los errores «Rate exceeded» y 429 «TooManyRequestsException»?

Errores de transformación de datos

«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» (Se ha producido un error al analizar los registros devueltos por la función de Lambda. Asegúrese de que los registros devueltos sigan el modelo de estado requerido por Kinesis Data Firehose).

Este error se produce cuando los registros transformados que devuelve Lambda no tienen el formato requerido. Todos los registros transformados que devuelve Lambda deben contener los parámetros recordId, result y data. Compruebe el código de la función de Lambda y los registros de CloudWatch para comprobar que estos registros contienen estos parámetros.

Nota: Para eliminar intencionadamente un registro, defina el valor en Dropped.

Para obtener más información, consulte Transformación de datos y modelo de estado..

«DuplicatedRecordId - Multiple records were returned with the same record ID. Ensure that the Lambda function returns unique record IDs for each record» (Se han devuelto varios registros con el mismo ID de registro. Asegúrese de que la función de Lambda devuelva ID de registro únicos para cada registro).

Este error se produce si varios registros transformados devueltos por la función de Lambda a Kinesis Firehose tienen el mismo ID de registro. El ID de registro pasa de Kinesis Data Firehose a Lambda durante la invocación de la función. Compruebe el código de la función de Lambda y los registros de CloudWatch para comprobar que cada ID de registro sea único.

Errores de la función de Lambda

«The Lambda function was successfully invoked but it returned an error result» (La función de Lambda se ha invocado correctamente, pero ha devuelto un resultado de error).

Este error se produce cuando Amazon Kinesis Data Firehose puede invocar correctamente la función de Lambda, pero la ejecución de la función de Lambda falla debido a un error. Compruebe las métricas de transformación de datos de CloudWatch para confirmar que Kinesis Data Firehose haya invocado la función.

Si Kinesis Data Firehose no ha invocado la función de Lambda, compruebe el tiempo de invocación para ver si ha superado el parámetro de tiempo de espera. Es posible que la función de Lambda requiera un valor de tiempo de espera mayor o necesite más memoria para completarse. Para obtener más información sobre las métricas de invocación, consulte Métricas de invocación.

«Exceeded maximum allowed payload size» (Se ha superado el tamaño máximo de carga permitido) o «LAMBDA_RUNTIME Failed to post handler success response. Http response code: 413» («LAMBDA_RUNTIME No se ha podido publicar la respuesta correcta del controlador. Código de respuesta http: 413).

Amazon Kinesis Data Firehose invoca una función de Lambda de forma sincrónica y el límite de carga de invocación es de 6 MB para cada solicitud y respuesta. El límite de carga de Lambda es un límite máximo y no se puede aumentar. Asegúrese de que el tamaño del búfer no supere los 6 MB para cada solicitud y respuesta.

Para obtener más información, consulte Cuotas de Lambda.

Información relacionada

¿Por qué se produce un error en la entrega de datos con Kinesis Data Firehose?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año