Come posso risolvere i problemi relativi ai flussi DynamoDB nelle mie funzioni Lambda?

5 minuti di lettura
0

Voglio utilizzare o risolvere i problemi di Amazon DynamoDB Streams con le mie funzioni AWS Lambda.

Soluzione

Di seguito sono riportate le domande più frequenti quando si utilizza DynamoDB Streams con la funzione Lambda:

Perché la mia funzione Lambda non viene ridimensionata quando il flusso DynamoDB è un trigger?

Quando attivi un flusso DynamoDB su una tabella DynamoDB, Amazon DynamoDB associa uno shard per ogni partizione. Ad esempio, se la tua tabella DynamoDB ha 10 partizioni e attivi DynamoDB Streams su questa tabella, avrai 10 shard.

Se il numero di partizioni nella tabella aumenta, aumenterà anche il numero di shard nel flusso.

Ogni partizione su una tabella DynamoDB può gestire fino a 3000 unità di capacità di lettura (RCU), 1000 unità di capacità di scrittura (WCU) e 10 GB di dati. Il superamento di uno di questi parametri comporta quanto segue:

  • L'aggiunta di una nuova partizione alla tabella.
  • La creazione di un nuovo shard nel flusso DynamoDB.

Come posso controllare l'elaborazione dei dati dal flusso DynamoDB?

La dimensione del batch e la finestra del batch aiutano a controllare l'elaborazione dei dati dal flusso.

**Finestra batch:**Imposta per quanto tempo attendere i record prima di richiamare. La finestra batch fornisce il controllo sull'elaborazione dei dati da DynamoDB Stream. Tieni presente che questo comportamento dipende dalla disponibilità dei dati all'interno del flusso.

**Dimensione del batch:**Imposta il numero massimo di record nel batch.

La funzione Lambda non viene richiamata finché non vengono soddisfatte le seguenti condizioni:

  • La dimensione del payload raggiunge i 6 MB (limite di invocazione sincrona).
  • La finestra batch raggiunge il valore massimo (60 secondi, in questo esempio).
  • La dimensione del batch raggiunge il valore massimo.

Come viene utilizzato Parellelization Factor per accelerare l'elaborazione dei dati?

Parallelization Factor elabora rapidamente grandi quantità di record consentendo più esecuzioni simultanee. È possibile impostare Parallelization Factor (impostazione predefinita: da 1 a 10) per aumentare il numero di frammenti che vengono elaborati. Quando attivi Parallelization Factor, assicurati di utilizzare chiavi di partizione casuali o univoche per ottenere la massima velocità di trasmissione effettiva.

Calcolo: Parallelization Factor (batch simultanei per shard) * Shards = Esecuzione simultanea

Cos'è l'impostazione BisectBatchonFunctionError?

Se la funzione Lambda fallisce, i batch vengono divisi in due quando l'opzione BisectBatchonFunctionError è impostata su true. I batch divisi vengono quindi ritentati finché non viene trovato il record del problema. I nuovi tentativi vengono elaborati in base alle impostazioni massime per i tentativi e l'età di registrazione.

Se l'opzione Numero tentativi è impostata su 0, non vengono effettuati nuovi tentativi per il record fallito. In questo caso, DynamoDB Stream elimina i record con errori o li invia alla Dead Letter Queue (DLQ), se configurata.

Esempio 1

Nell'esempio seguente, 'p' rappresenta il record del problema e il numero di tentativi è impostato su 0.

Batch di record:\ [1,2,3p,4,5p]

Divisione 1:\ [3p,4,5p]

Divisione 2:\ [3p]\ [4,5p] Il nuovo tentativo scarta\ [3p] perché è identificato come il record del problema. Oppure, viene inviato al DLQ, se configurato.

Divisione 3:\ [4] viene elaborata.\ [5p] viene scartata o inviata al DLQ, se configurato.

Esempio 2

Nell'esempio seguente, 'x' rappresenta il record del problema. Il numero di tentativi è impostato su**-1**.

Batch di record inseriti: [1,2,3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

Perché IteratorAge in Lambda aumenta per il mio flusso DynamoDB?

I motivi più comuni per cui IteratorAge in Lambda aumenta sono i seguenti:

  • C'è un record errato nel flusso di DynamoDB.
  • C'è un volume elevato di operazioni di scrittura (da PutItem a ** BatchWriteItem**) sul flusso. La funzione Lambda potrebbe non essere in grado di tenere il passo con l'elaborazione di un volume di scrittura elevato. In tal caso, aumenta la capacità fornita dalla tabella DynamoDB per aumentare il numero di partizioni per 1000 WCU. L'aumento della capacità fornita aumenta il numero di esecuzioni Lambda simultanee. Per ulteriori informazioni, consulta la sezione precedente Perché la mia funzione Lambda non viene ridimensionata quando DynamoDB Stream è un trigger?
  • Si è registrato un calo del numero di partizioni DynamoDB, ad esempio nella migrazione a un nuovo account o a una nuova tabella.
  • Ci sono errori di limitazione o di funzione nella funzione Lambda. AWS Lambda riprova i record fino alla scadenza dell'intero batch o alla scadenza del record. Inoltre, il periodo di conservazione dei flussi DynamoDB è di 24 ore. Per evitare la perdita di dati, è consigliabile configurare il DLQ. Se il DLQ è configurato, AWS Lambda invia batch di record non riusciti al DLQ dopo il completamento dei ritiri o la scadenza del periodo di validità dei record.
    Per risolvere gli errori della funzione Lambda, controlla i log di Amazon CloudWatch per i dettagli sull'errore.
  • C'è un aumento della durata della funzione Lambda.
  • È necessario ottimizzare la gestione degli errori e Parallelization Factor.

Per informazioni dettagliate, consulta Perché la mia metrica Lambda IteratorAge sta aumentando e come posso diminuirla?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa