Como soluciono problemas do DynamoDB Streams em minhas funções do Lambda?
Quero usar ou solucionar problemas do Amazon DynamoDB Streams com minhas funções do Lambda da AWS.
Resolução
As perguntas a seguir são comuns ao usar o DynamoDB Streams com a função do Lambda:
Por que minha função do Lambda não ajusta a escala quando o fluxo do DynamoDB é um gatilho?
Quando você ativa um fluxo do DynamoDB em uma tabela do DynamoDB, o Amazon DynamoDB associa um fragmento a cada partição. Por exemplo, se sua tabela do DynamoDB tiver 10 partições e você ativar o DynamoDB Streams nessa tabela, você terá 10 fragmentos.
Se o número de partições de sua tabela aumentar, o número de fragmentos no fluxo também aumentará.
Cada partição de uma tabela do DynamoDB pode lidar com até 3.000 unidades de capacidade de leitura (RCUs), 1.000 unidades de capacidade de gravação (WCUs) e 10 GB de dados. Exceder qualquer um desses parâmetros resulta no seguinte:
- Acréscimo de uma nova partição à tabela.
- Criação de um novo fragmento no fluxo do DynamoDB.
Como faço para controlar o processamento de dados do fluxo do DynamoDB?
O tamanho e a janela do lote ajudam a controlar o processamento de dados do fluxo.
Janela de lote: define quanto tempo esperar pelos registros antes de invocar. A janela de lote fornece controle sobre o processamento de dados do DynamoDB Stream. Observe que esse comportamento depende da disponibilidade de dados no fluxo.
Tamanho do lote: define o número máximo de registros no lote.
A função do Lambda não é invocada até que as seguintes condições sejam atendidas:
- O tamanho da carga útil atinge 6 MB (limite de invocação síncrona).
- A janela de lote atinge seu valor máximo (60 segundos, neste exemplo).
- O tamanho do lote atinge seu valor máximo.
Como o fator de paralelização é usado para acelerar o processamento de dados?
O fator de paralelização processa grandes quantidades de registros rapidamente, permitindo mais execuções simultâneas. Você pode definir o fator de paralelização (padrão: 1 a 10) para aumentar o número de fragmentos processados. Ao ativar o fator de paralelização, certifique-se de usar teclas de partição aleatórias ou exclusivas para obter o throughput mais alto.
Cálculo: fator de paralelização (lotes simultâneos por fragmento) * Fragmentos = execução simultânea
O que é a configuração BisectBatchonFunctionError?
Se a função do Lambda falhar, os lotes serão divididos em dois quando a opção BisectBatchonFunctionError for definida como verdadeira. Os lotes divididos são, então, repetidos até que o registro do problema seja encontrado. As novas tentativas são processadas com base nas configurações máximas de repetição e de idade de registro.
Se a opção Tentativas repetidas estiver definida como 0, não haverá novas tentativas para o registro que falhou. Nesse caso, o DynamoDB Stream descarta os registros que falharam ou os envia para a Dead Letter Queue (DLQ), se configurada.
Exemplo 1
No exemplo a seguir, 'p' representa o registro do problema e Tentativas de repetição estão definidas como 0.
Registro de lote: [1,2,3p,4,5p]
Divisão 1: [3p,4,5p]
Divisão 2: [3p]\ [4,5p] A nova tentativa descarta\ [3p] porque é identificada como o registro do problema. Ou ele é enviado para o DLQ, se configurada.
Divisão 3: [4] é processada. [5p] é descartada ou enviada para a DLQ, se configurada.
Exemplo 2
No exemplo a seguir, 'x' representa o registro do problema. Novas tentativas são definidas como \ -1.
Registros de lote inseridos: [1,2,3x,4,5x]
[3x,4,5x]
[3x,4,5x]
[3x,4,5x]
[3x,4,5x]
Por que o IteratorAge no Lambda aumenta para meu fluxo do DynamoDB?
A seguir estão os motivos comuns para o aumento do IteratorAge no Lambda:
- Há um registro incorreto no fluxo do DynamoDB.
- Há um grande volume de operações de gravação (PutItem a BatchWriteItem) no fluxo. A função do Lambda pode não ser capaz de acompanhar o processamento de um alto volume de gravação. Se isso ocorrer, aumente a capacidade provisionada da tabela do DynamoDB para aumentar a contagem de partições por 1.000 WCUs. O aumento da capacidade provisionada aumenta o número de execuções simultâneas do Lambda. Para mais informações, consulte a seção anterior Por que minha função do Lambda não ajusta a escala quando o DynamoDB Stream é um gatilho?
- Houve uma queda no número de partições do DynamoDB, como a migração para uma nova conta ou para uma nova tabela.
- Há erros de limitação ou de função na função do Lambda. O AWS Lambda repete os registros até que todo o lote seja processado com êxito ou que a idade do registro expire. Além disso, o período de retenção do DynamoDB Streams é de 24 horas. Para evitar a perda de dados, recomenda-se configurar a DLQ. Se a DLQ estiver configurada, então o AWS Lambda envia lotes de registros com falha para a DLQ após a conclusão das tentativas ou o vencimento da idade do registro.
Para resolver erros de função do Lambda, consulte o Amazon CloudWatch Logs para obter detalhes sobre o erro. - Há um aumento na duração da função do Lambda.
- Você deve otimizar o tratamento de erros e o fator de paralelização.
Para informações detalhadas, consulte Why is my Lambda IteratorAge metric increasing, and how do I decrease it? (Por que minha métrica do Lambda IteratorAge está aumentando e como faço para diminuí-la?)
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 meses
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há 2 anos