Como solucionar problemas de integração do Lambda com o Kinesis Firehose?

6 minuto de leitura
0

Integrei o AWS Lambda ao Amazon Kinesis Data Firehose para transformar dados de origem recebidos e entregar os dados transformados a destinos. No entanto, a função do Lambda não foi invocada nem falhou.

Breve descrição

As funções do Lambda configuradas com o Amazon Kinesis Data Firehose podem falhar devido ao seguinte:

  • Permissões insuficientes do AWS Identity and Access Management (IAM)
  • Duração do Lambda que excede o tempo limite máximo permitido
  • Limitação do lambda
  • Erros de transformação de dados
  • Erros da função do Lambda

**Observação:**se a invocação da função do Lambda tiver um tempo limite de rede ou falhar porque você atingiu o limite de invocação, o Kinesis Data Firehose repetirá a invocação três vezes. Para obter mais informações, consulte Tratamento de falhas na transformação de dados.

Resolução

Se você ainda não fez isso, ative logs do Amazon CloudWatch para seu Kinesis Data Firehose. Você pode visualizar os logs de erros específicos quando a invocação do Lambda para transformação ou entrega de dados falhar. Você pode ativar logs de erros do Kinesis Data Firehose ao criar seu stream de entrega. O formato do nome do grupo de logs é /aws/kinesisfirehose/delivery-stream-name. delivery-stream-name é o nome do stream de entrega.

Para identificar por que a função do Lambda falhou, verifique o grupo do Amazon CloudWatch Logs para /aws/lambda/lambda-function-name. Os registros de transformação de dados com falha são entregues ao bucket do Amazon Simple Storage Service (Amazon S3) como um backup na pasta cujo processamento falhou. Os logs no seu bucket do S3 também contêm a mensagem de erro de falha na invocação. Para obter mais informações sobre como resolver falhas de invocação do Lambda, consulte Tratamento de falhas na transformação de dados.

Permissões insuficientes do IAM

"AssumeRoleAccessDenied - Access was denied. Ensure that the trust policy for the provided IAM role allows Kinesis Data Firehose to assume the role."

Esse erro ocorre quando o perfil do IAM do Amazon Kinesis Data Firehose não pode assumir “firehose.amazonaws.com”. Certifique-se de que a política de confiança do IAM tenha permissões para assumir “firehose.amazonaws.com”, semelhante ao seguinte:

{
  "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."

Esse erro ocorre quando o perfil do IAM do Amazon Kinesis Data Firehose não tem permissão para invocar a função do Lambda usada para transformação de dados. Certifique-se de que a política do IAM permita que o Amazon Kinesis Data Firehose invoque a função do Lambda, semelhante ao seguinte:

Observação: substitua o ARN do recurso neste exemplo pelas suas variáveis.

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

Duração do Lambda que excede o tempo limite máximo permitido

"Firehose encountered timeout errors when calling AWS Lambda. The maximum supported function timeout is 5 minutes."

Esse erro ocorre quando a função do Lambda leva mais de 5 minutos para ser concluída. Para solucionar erros de tempo limite da função do Lambda com o Kinesis Data Firehose, consulte Tratamento de falhas na transformação de dados.

Limitação do lambda

"InvokeLimitExceeded - The Lambda concurrent execution limit is exceeded. Increase the concurrent execution limit."

Esse erro ocorre quando o limite de execução simultânea do Lambda é excedido. Analise as métricas de simultaneidade do Lambda nos logs do CloudWatch para determinar seu uso. Para solicitar um aumento de execuções simultâneas, consulte Solicitar um aumento de cota.

Para mais informações, consulte Escalonamento de funções do Lambda e Como soluciono problemas de controle de utilização da função do Lambda com os erros "Rate exceeded" e 429 "TooManyRequestsException"?

Erros de transformação de dados

"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."

Esse erro ocorre quando os logs transformados retornados pelo Lambda não estão no formato necessário. Todos os logs transformados retornados do Lambda devem conter os parâmetros recordId, result e data. Verifique o código da função do Lambda e os logs do CloudWatch para verificar se esses logs contêm esses parâmetros.

Observação: para eliminar intencionalmente um log, defina o valor como Dropped (Descartado).

Para mais informações, consulte Transformação de dados e modelo de status.

"DuplicatedRecordId - Multiple records were returned with the same record ID. Ensure that the Lambda function returns unique record IDs for each record."

Esse erro ocorre quando vários logs transformados retornados pela função do Lambda para o Kinesis Firehose têm o mesmo ID de log. O ID do log é passado do Kinesis Data Firehose para o Lambda durante a invocação da função. Verifique o código da função do Lambda e os logs do CloudWatch para verificar se cada ID de log é exclusivo.

Erros da função do Lambda

"The Lambda function was successfully invoked but it returned an error result."

Esse erro ocorre quando o Amazon Kinesis Data Firehose conseguiu invocar com êxito a função do Lambda, mas a execução da função do Lambda falhou devido a um erro. Verifique as métricas de transformação de dados do CloudWatch para confirmar se o Kinesis Data Firehose invocou sua função.

Se o Kinesis Data Firehose não tiver invocado sua função do Lambda, verifique o tempo de invocação para ver se ele está além do parâmetro de tempo limite. Sua função do Lambda talvez precise de um valor de tempo limite maior ou de mais memória para ser concluída. Para mais informações sobre métricas de invocação, consulte Métricas de invocação.

"Exceeded maximum allowed payload size” or “LAMBDA_RUNTIME Failed to post handler success response. Http response code: 413."

O Amazon Kinesis Data Firehose invoca uma função do Lambda de forma síncrona, e o limite de carga de invocação é de 6 MB para cada solicitação e resposta. O limite de carga útil do Lambda é um limite fixo e não pode ser aumentado. Certifique-se de que o tamanho do buffer não exceda 6 MB para cada solicitação e resposta.

Para mais informações, consulte Cotas do Lambda.

Informações relacionadas

Por que estou enfrentando uma falha na entrega de dados com o Kinesis Data Firehose?

AWS OFICIAL
AWS OFICIALAtualizada há um ano