Por que o gatilho do Kinesis Data Streams não consegue invocar minha função do Lambda?

6 minuto de leitura
0

Integrei o AWS Lambda ao Amazon Kinesis Data Streams como fonte de eventos para processar meu fluxo de dados do Amazon Kinesis, mas a função não é invocada.

Breve descrição

Confira a seguir as causas comuns de erros da função do Lambda:

  • Permissões insuficientes no perfil de execução da função do Lambda
  • Não há entrada de dados no fluxo de dados do Kinesis
  • Mapeamento da origem do evento inativo, causado pela recriação de um fluxo de dados do Kinesis, função do Lambda ou perfil de execução do Lambda
  • Uma função do Lambda que excede o tempo máximo de execução e causa um erro de limite de tempo
  • O Lambda viola seus limites de execuções simultâneas

Se houver um erro na função Lambda, sua função não será invocada. A função também não processa registros do lote. Um erro pode fazer com que o Lambda tente novamente o lote de registros até que o processo seja bem-sucedido ou o lote expire. Para mais informações sobre a função do Lambda e os erros do Kinesis, consulte Using AWS Lambda with Amazon Kinesis (Como usar o AWS Lambda com o Amazon Kinesis).

Resolução

Solucionar problemas de sua função do Lambda

Para identificar por que sua função do Lambda não é invocada, conclua as seguintes etapas:

  1. Verifique a métrica Invocations no Amazon CloudWatch com estatísticas definidas como Sum para a função do Lambda. A métrica Invocations pode ajudar você a verificar se a função do Lambda foi invocada.

  2. Verifique a métrica IteratorAge para ver a idade do último registro no lote ou quando o processamento foi concluído. Quando seu consumidor do Lambda não consegue invocar, a idade do iterador do seu fluxo aumenta.

  3. Verifique os registros do CloudWatch da função do Lambda. Os registros usam o formato .../aws/lambda/function_name para seus nomes. Procure as entradas correspondentes ao erro da função. Por exemplo, se o erro ocorrer devido às permissões do perfil do AWS Identity and Access Management (IAM), então modifique a política de perfil do IAM.

  4. Confirme se seu perfil do IAM tem as permissões adequadas para acessar o CloudWatch:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "*"
        }
      ]
    }
  5. (Opcional) Em caso de erro de permissão, atualize sua política de funções do Lambda e conceda a ela acesso ao Kinesis Data Streams:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "kinesis:DescribeStream",
            "kinesis:DescribeStreamSummary",
            "kinesis:GetRecords",
            "kinesis:GetShardIterator",
            "kinesis:ListShards",
            "kinesis:ListStreams",
            "kinesis:SubscribeToShard",
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "*"
        }
      ]
    }

    Observação: a política AWSLambdaKinesisExecutionRole inclui essas permissões.

Solução de problemas adicional

Para realizar uma solução de problemas adicional, conclua as seguintes tarefas:

Tempo limite da função de execução do Lambda

Se o erro estiver relacionado ao limite de tempo de um perfil de execução do Lambda, aumente o valor do limite de tempo para acomodar um processamento mais rápido.

**Fluxo de dados criptografado do AWS KMS **

Se você usar o AWS Key Management Service (AWS KMS) para criptografar o fluxo de dados do Kinesis, o consumidor e o produtor devem ter acesso adequado. O fluxo de dados do Kinesis deve ser capaz de acessar as chaves do AWS KMS que são usadas para criptografia e decodificação. O perfil de execução da função Lambda também deve ter acesso de leitura à chave KMS para ler com êxito os dados do fluxo de dados do Kinesis.

Erro interno da função Lambda

Se o erro for causado por um erro interno da função do Lambda, então há um problema com o processamento do fluxo. Para evitar o controle de utilização da API do ambiente de gerenciamento, restrinja cada fluxo a 4 a 5 mapeamentos de origem de eventos. Essas restrições ajudam a evitar muitos mapeamentos de fontes de eventos com o mesmo fluxo de dados. Vários mapeamentos de origem de eventos com o mesmo fluxo podem resultar em uma violação dos limites do ambiente de gerenciamento do Kinesis e do Amazon DynamoDB.

Erro de tempo limite de conexão

Se você receber um erro de limite de tempo de conexão, adicione instruções de log antes e depois das chamadas de API feitas em seu código. Em seguida, você pode identificar a linha exata do código em que o perfil começa a falhar.

**Fragmentos lentos ou paralisados **

Se você tiver fragmentos lentos ou paralisados, configure o mapeamento da origem do evento para tentar novamente com um tamanho de lote menor. Você também pode limitar o número de tentativas ou descartar registros antigos.

Erro “Memória usada”

Se aparecer uma mensagem de erro de “memória usada” em seus logs do CloudWatch, aumente a memória da sua função do Lambda.

Tempo limite máximo excedido

Se você excedeu o limite de tempo máximo para sua função do Lambda, modifique a biblioteca do cliente e os limites de tempo do cliente. Para modificar a sessão de limite de tempo com base no tempo restante no contêiner do Lambda, use a função context.GetRemainingTimeInMillis. A função context.GetRemainingTimeInMillis retorna a quantidade de tempo restante no contêiner do Lambda antes que ele atinja o limite de tempo.

Erro no código da função Lambda

Se você receber erros do código da função do Lambda, sua função do Lambda poderá ficar paralisada ao tentar o mesmo registro. Use um bloco try-catch para capturar os dados que falharam. Em seguida, use uma fila do Amazon Simple Queue Service (Amazon SQS) ou um tópico do Amazon Simple Notification Service (Amazon SNS) para registrá-la. Você também pode adicionar um gatilho do Lambda à fila do Amazon SQS com a lógica de processamento para separadamente repetir as solicitações que falharam.

SQS DLQ

Configure uma fila de mensagens não entregues (DLQ) do Amazon SQS para invocar manualmente a função do Lambda. Configure a propriedade DeadLetterConfig ao criar ou atualizar sua função do Lambda. Você pode fornecer uma fila do Amazon SQS ou um tópico do Amazon SNS como TargetArn para sua DLQ. Em seguida, o Lambda grava o objeto de evento e invoca a função do Lambda para o endpoint especificado após o esgotamento da política de repetição padrão.

Lambda com X-Ray

Use o Lambda com o AWS X-Ray para detectar, analisar e otimizar problemas de desempenho com aplicativos Lambda. O X-Ray coleta metadados do serviço Lambda e gera gráficos que descrevem problemas que afetam o desempenho do aplicativo Lambda. Por exemplo, se houver uma chamada que esteja demorando muito para ser executada, você poderá usar o AWS X-Ray para confirmar o problema.

AWS OFICIAL
AWS OFICIALAtualizada há 5 meses