

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo AWS Lambda con Amazon DynamoDB
<a name="with-ddb"></a>

**Nota**  
[Se desideri inviare dati a una destinazione diversa da una funzione evento Lambda o arricchire i dati prima di inviarli, consulta Amazon Pipes. EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html)

Puoi utilizzare una AWS Lambda Event Function per elaborare i record in un flusso [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html). Con DynamoDB Streams, puoi attivare una funzione di evento Lambda per eseguire operazioni aggiuntive ogni volta che viene aggiornata una tabella DynamoDB.

Durante l'elaborazione di flussi DynamoDB, è necessario implementare una logica di risposta batch parziale per evitare che i record elaborati correttamente vengano ritentati quando alcuni record di un batch falliscono. [L'utilità Batch Processor](https://docs.aws.amazon.com/powertools/python/latest/utilities/batch/) di Powertools for AWS Lambda è disponibile in Python TypeScript, .NET e Java e semplifica questa implementazione gestendo automaticamente la logica di risposta batch parziale, riducendo i tempi di sviluppo e migliorando l'affidabilità.

**Topics**
+ [Flussi di polling e batching](#dynamodb-polling-and-batching)
+ [Posizioni di partenza di polling e flussi](#dyanmo-db-stream-poll)
+ [Lettori simultanei di uno shard in DynamoDB Streams](#events-dynamodb-simultaneous-readers)
+ [Esempio di evento](#events-sample-dynamodb)
+ [Elaborare i record DynamoDB con Lambda](services-dynamodb-eventsourcemapping.md)
+ [Configurazione della risposta batch parziale con DynamoDB e Lambda](services-ddb-batchfailurereporting.md)
+ [Conservare i record scartati per un'origine eventi DynamoDB in Lambda](services-dynamodb-errors.md)
+ [Implementazione dell'elaborazione del flusso DynamoDB stateful in Lambda](services-ddb-windows.md)
+ [Parametri Lambda per gli strumenti di mappatura dell'origine degli eventi di Amazon DynamoDB](services-ddb-params.md)
+ [Utilizzo del filtro eventi con un'origine eventi DynamoDB](with-ddb-filtering.md)
+ [Tutorial: utilizzo AWS Lambda con flussi Amazon DynamoDB](with-ddb-example.md)

## Flussi di polling e batching
<a name="dynamodb-polling-and-batching"></a>

Lambda esegue il polling delle partizioni presenti nel proprio flusso DynamoDB ricercando i record a una velocità di base di 4 volte al secondo. Quando sono disponibili dei record, Lambda invoca la funzione e attende il risultato. Se l'elaborazione ha esito positivo, Lambda riprende il polling fino a quando non riceve più record.

Per impostazione predefinita, Lambda richiama la funzione non appena i record sono disponibili. Se il batch che Lambda legge dall'origine eventi contiene un solo record, Lambda invia solo un record alla funzione. Per evitare di richiamare la funzione con pochi record è possibile, configurando un *periodo di batch*, chiedere all'origine eventi di memorizzare nel buffer i registri per un massimo di 5 minuti. Prima di richiamare la funzione, Lambda continua a leggere i registri dall'origine eventi fino a quando non ha raccolto un batch completo, fino alla scadenza del periodo di batch o fino a quando il batch non ha raggiunto il limite del payload di 6 MB. Per ulteriori informazioni, consulta [Comportamento di batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

**avvertimento**  
Gli strumenti di mappatura dell'origine degli eventi elaborano ogni evento almeno una volta e può verificarsi un'elaborazione duplicata dei record. Per evitare potenziali problemi legati agli eventi duplicati, ti consigliamo vivamente di rendere idempotente il codice della funzione. Per ulteriori informazioni, consulta [Come posso rendere idempotente la mia funzione Lambda](https://repost.aws/knowledge-center/lambda-function-idempotent) nel Knowledge Center. AWS 

Lambda non attende il completamento di alcuna [estensione](lambda-extensions.md) prima di inviare il batch successivo per l'elaborazione. In altre parole, le estensioni possono continuare a funzionare mentre Lambda elabora il successivo batch di record. Ciò può causare problemi di limitazione in caso di violazione delle impostazioni o dei limiti di [simultaneità](lambda-concurrency.md). Per rilevare se si tratta di un potenziale problema, monitora le tue funzioni e verifica se i [parametri di simultaneità](monitoring-concurrency.md#general-concurrency-metrics) per lo strumento di mappatura dell'origine degli eventi sono superiori al previsto. A causa degli intervalli ridotti tra le invocazioni, Lambda potrebbe segnalare brevemente un utilizzo della simultaneità maggiore rispetto al numero di partizioni. Questo può essere vero anche per Lambda Event Functions senza estensioni.

Configura l'[ ParallelizationFactor](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-ParallelizationFactor)impostazione per elaborare uno shard di un flusso DynamoDB con più di una chiamata Lambda contemporaneamente. È possibile specificare il numero di batch simultanei che Lambda esegue il polling da uno shard utilizzando un fattore di parallelizzazione compreso tra 1 (impostazione predefinita) e 10. Ad esempio, se impostate su 2, potete avere `ParallelizationFactor` al massimo 200 chiamate Lambda simultanee per elaborare 100 stream shard DynamoDB (anche se in pratica, potreste vedere valori diversi per la metrica). `ConcurrentExecutions` Ciò permette di dimensionare verso l'alto il throughput di elaborazione quando il volume dei dati è volatile e l'[IteratorAge](monitoring-metrics-types.md#performance-metrics) è alta. Con`ParallelizationFactor`, Lambda esegue più batch simultanei per shard e raggruppa i record in ogni shard per chiave di partizione. All'interno di uno shard, i record che condividono una chiave di partizione vengono inseriti nello stesso batch simultaneo e vengono elaborati in ordine. I record con chiavi di partizione diverse possono essere elaborati contemporaneamente. DynamoDB Streams garantisce l'ordinamento per articolo (chiave di partizione e chiave di ordinamento). Di conseguenza, i record di stream per ogni singolo elemento vengono sempre visualizzati nell'ordine in cui l'elemento è stato modificato.

## Posizioni di partenza di polling e flussi
<a name="dyanmo-db-stream-poll"></a>

Tieni presente che il polling dei flussi durante la creazione e gli aggiornamenti dello strumento di mappatura dell’origine degli eventi alla fine è coerente.
+ Durante la creazione dello strumento di mappatura dell'origine degli eventi, potrebbero essere necessari alcuni minuti per l'avvio degli eventi di polling dal flusso.
+ Durante gli aggiornamenti dello strumento di mappatura dell'origine degli eventi, potrebbero essere necessari alcuni minuti per l'avvio degli eventi di polling dal flusso.

Questo comportamento implica che se specifichi `LATEST` come posizione iniziale del flusso, lo strumento di mappatura dell’origine degli eventi potrebbe perdere eventi durante la creazione o gli aggiornamenti. Per garantire che nessun evento venga perso, specifica la posizione di inizio del flusso come `TRIM_HORIZON`.

## Lettori simultanei di uno shard in DynamoDB Streams
<a name="events-dynamodb-simultaneous-readers"></a>

Per le tabelle a regione singola che non sono tabelle globali, puoi progettare fino a due funzioni di evento Lambda da leggere dallo stesso shard DynamoDB Streams contemporaneamente. Il superamento di questo limite comporta una limitazione delle richieste. Per le tabelle globali consigliamo di limitare il numero di lettori simultanei a uno per evitare richieste di limitazione della larghezza di banda della rete.

## Esempio di evento
<a name="events-sample-dynamodb"></a>

**Example**  

```
{
  "Records": [
    {
      "eventID": "1",
      "eventVersion": "1.0",
      "dynamodb": {
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "NewImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES",
        "SequenceNumber": "111",
        "SizeBytes": 26
      },
      "awsRegion": "us-west-2",
      "eventName": "INSERT",
      "eventSourceARN": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525",
      "eventSource": "aws:dynamodb"
    },
    {
      "eventID": "2",
      "eventVersion": "1.0",
      "dynamodb": {
        "OldImage": {
          "Message": {
            "S": "New item!"
          },
          "Id": {
            "N": "101"
          }
        },
        "SequenceNumber": "222",
        "Keys": {
          "Id": {
            "N": "101"
          }
        },
        "SizeBytes": 59,
        "NewImage": {
          "Message": {
            "S": "This item has changed"
          },
          "Id": {
            "N": "101"
          }
        },
        "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "awsRegion": "us-west-2",
      "eventName": "MODIFY",
      "eventSourceARN": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525",
      "eventSource": "aws:dynamodb"
    }
  ]}
```