Perché la mia chiamata API TransactWriteItems non viene eseguita correttamente in Amazon DynamoDB?

Ultimo aggiornamento:07/09/2022

La mia chiamata API TransactWriteItems non viene eseguita correttamente e vorrei capire qual è la causa principale del problema.

Risoluzione

Esistono diversi motivi per cui una richiesta TransactWriteItems potrebbe essere eseguita non correttamente o essere rifiutata da Amazon DynamoDB.

Una condizione delle espressioni di condizione non viene soddisfatta

Se una condizione impostata per una delle operazioni nella richiesta TransactWriteItems non viene soddisfatta, tutte le operazioni hanno esito negativo. TransactWriteItems è un'operazione di scrittura sincrona che raggruppa fino a 25 richieste di azione. Pertanto, o tutte le richieste di azione hanno esito positivo o tutte le richieste di azione hanno esito negativo.

Se si verifica questo problema, viene visualizzato un messaggio di errore simile al seguente:

"message": "Transaction cancelled, please refer cancellation reasons for specific reasons [ConditionalCheckFailed, None, None, None] (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: TransactionCanceledException;..."

Per risolvere questo problema, assicurati che tutte le condizioni impostate per la tua richiesta siano soddisfatte.

La tabella nella richiesta TransactWriteItems si trova in una regione diversa o in un account diverso

Le richieste TransactWriteItems consentono di lavorare con elementi in tabelle diverse. Tuttavia, non è possibile lavorare con tabelle che si trovano in regioni diverse o in account diversi. Assicurati di lavorare con tabelle che si trovano nella stessa regione dell'account da cui stai effettuando la richiesta TransactWriteItems.

Più di un'azione nell'operazione TransactWriteItems gestisce lo stesso elemento

Quando più di un'azione nell'operazione TransactWriteItems gestisce lo stesso elemento, la richiesta ha esito negativo con un messaggio simile al seguente:

“La richiesta di transazione non può includere molteplici operazioni su un elemento”

Ad esempio, se TransactWriteItems tenta di eseguire un'operazione ConditionCheck e Put sullo stesso elemento, la richiesta non viene eseguita correttamente. È possibile monitorare questa eccezione TransactionConflict utilizzando il parametro TransactionConflict per la tabella DynamoDB in Amazon CloudWatch.

La capacità assegnata non è sufficiente per completare la transazione

Come qualsiasi altra operazione, una tabella DynamoDB potrebbe essere limitata quando richiami l'operazione TransactWriteItems. Per ulteriori informazioni sulla risoluzione di questo problema, consulta Perché la mia tabella Amazon DynamoDB su richiesta viene limitata? e Perché la mia tabella Amazon DynamoDB viene limitata?

Si è verificato un errore di convalida (ValidationError)

Se la dimensione di un elemento supera i 400 KB o un indice secondario locale (LSI) diventa troppo grande, si verifica un errore di convalida (ValidationErrror). Allo stesso modo, possono verificarsi errori di convalida a causa delle modifiche apportate dalla transazione. Ciò significa che l'input non riesce a soddisfare uno o più vincoli specificati dal servizio DynamoDB. L'errore di convalida è accompagnato da uno di questi messaggi, a seconda del vincolo non soddisfatto:

  • Uno o più valori di parametro non sono validi.
  • L'espressione di aggiornamento tenta di aggiornare la chiave di indice secondaria oltre i limiti di dimensione consentiti.
  • L'espressione di aggiornamento tenta di aggiornare la chiave di indice secondaria a un tipo non supportato.
  • Un operando nell'espressione di aggiornamento ha un tipo di dati errato.
  • L'elemento da aggiornare ha superato le dimensioni massime consentite.
  • Si sta tentando di memorizzare un numero con una grandezza maggiore dell'intervallo supportato o un overflow numerico.
  • Vi è una mancata corrispondenza del tipo per l'attributo da aggiornare.
  • I livelli di nidificazione hanno superato i limiti supportati.
  • Il percorso del documento fornito nell'espressione di aggiornamento non è valido per l'aggiornamento.
  • L'espressione fornita si riferisce a un attributo che non esiste nell'elemento.

DynamoDB limita le dimensioni di ogni elemento che è possibile memorizzare in una tabella. Se l'applicazione necessita di memorizzare più dati in un elemento rispetto al limite di dimensione consentito, comprimi uno o più attributi più grandi. In alternativa, suddividi l'elemento in più elementi, indicizzati in base alla chiave di ordinamento. Puoi anche archiviare l'articolo come oggetto in Amazon Simple Storage Service (Amazon S3). Quindi, memorizza l'identificativo dell'oggetto Amazon S3 nel tuo elemento DynamoDB. Per ulteriori informazioni, consulta Best practice per l'archivio di elementi e attributi di grandi dimensioni.

La dimensione aggregata degli elementi in una transazione supera i 4 MB

Le operazioni TransactWriteItems non possono superare i 4 MB. Questo è un limite difficile. Per ulteriori informazioni, consulta Transazioni di DynamoDB.

Si è verificato un errore dell'utente

Un errore dell'utente, come un formato di dati non valido, può verificarsi per una serie di motivi. Ad esempio, è possibile che venga visualizzato un errore 4xx per ResourceNotFoundException perché l'operazione TransactWriteItems non riesce a trovare la tabella o l'indice DynamoDB sottostante. In alternativa, la tabella o l'indice DynamoDB potrebbe non essere ATTIVO.

Nota: quando utilizzi l'AWS SDK per Java, DynamoDB elenca i motivi dell'annullamento nella proprietà CancellationReasons. Questa proprietà non è impostata per altre lingue. I motivi dell'annullamento delle transazioni sono elencati nell'ordine degli elementi richiesti. Se un elemento non presenta errori, elenca un codice NESSUNO e un messaggio nullo. Per ulteriori informazioni, consulta TransactWriteItems.


Questo articolo è stato utile?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?