TransactWriteItems - AWS AppSync

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à.

TransactWriteItems

Il documento di mappatura delle TransactWriteItems richieste consente di indicare al AWS AppSync resolver DynamoDB di TransactWriteItems richiedere a DynamoDB di scrivere più elementi, potenzialmente su più tabelle. Per questo modello di richiesta, è necessario specificare quanto segue:

  • Il nome della tabella di destinazione di ogni elemento di richiesta

  • L'operazione di ogni elemento di richiesta da eseguire. Sono supportati quattro tipi di operazioni:,, e PutItemUpdateItemDeleteItemConditionCheck

  • La chiave di ogni elemento di richiesta da scrivere

Si applicano i limiti TransactWriteItems DynamoDB.

Il documento di mappatura TransactWriteItems ha la seguente struttura:

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "table1", "operation": "PutItem", "key": { "foo": ... typed value, "bar": ... typed value }, "attributeValues": { "baz": ... typed value }, "condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table":"table2", "operation": "UpdateItem", "key": { "foo": ... typed value, "bar": ... typed value }, "update": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value } }, "condition": { "expression": "someExpression", "expressionNames": { "#foo":"foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table3", "operation": "DeleteItem", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table4", "operation": "ConditionCheck", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } } ] }

TransactWriteItems campi

I campi sono definiti come segue:
version

La versione di definizione del modello. Solo 2018-05-29è supportata. Questo valore è obbligatorio.

operation

L'operazione DynamoDB da eseguire. Per eseguire l'operazione TransactWriteItems DynamoDB, il valore deve essere impostato su TransactWriteItems. Questo valore è obbligatorio.

transactItems

Gli elementi di richiesta da includere. Il valore è un array di elementi di richiesta. Deve essere fornito almeno un elemento di richiesta. Questo valore transactItems è obbligatorio.

Per PutItem, i campi sono definiti come segue:

table

La tabella DynamoDB di destinazione. Il valore è una stringa del nome della tabella. Questo valore table è obbligatorio.

operation

L'operazione DynamoDB da eseguire. Per eseguire l'operazione PutItem DynamoDB, il valore deve essere impostato su PutItem. Questo valore è obbligatorio.

key

La chiave DynamoDB che rappresenta la chiave primaria dell'elemento da inserire. Gli elementi DynamoDB possono avere una sola chiave hash o una chiave hash e una chiave di ordinamento, a seconda della struttura della tabella. Per ulteriori informazioni su come specificare un «valore digitato», consulta Sistema di tipi (mappatura delle richieste). Questo valore è obbligatorio.

attributeValues

Gli altri attributi della voce da inserir in DynamoDB. Per ulteriori informazioni su come specificare un «valore digitato», vedete Type system (request mapping). Questo campo è facoltativo.

condition

Una condizione per determinare se la richiesta deve riuscire o no in base allo stato dell'oggetto già incluso in DynamoDB. Se non viene specificata alcuna condizione, la richiesta PutItem sovrascrive qualsiasi valore esistente per quella voce. È possibile specificare se recuperare l'elemento esistente quando il controllo delle condizioni non riesce. Per ulteriori informazioni sulle condizioni transazionali, consulta Espressioni delle condizioni di transazione. Questo valore è facoltativo.

Per UpdateItem, i campi sono definiti come segue:

table

La tabella DynamoDB da aggiornare. Il valore è una stringa del nome della tabella. Questo valore table è obbligatorio.

operation

L'operazione DynamoDB da eseguire. Per eseguire l'operazione UpdateItem DynamoDB, il valore deve essere impostato su UpdateItem. Questo valore è obbligatorio.

key

La chiave DynamoDB che rappresenta la chiave primaria dell'elemento da aggiornare. Gli elementi DynamoDB possono avere una sola chiave hash o una chiave hash e una chiave di ordinamento, a seconda della struttura della tabella. Per ulteriori informazioni su come specificare un «valore digitato», consulta Sistema di tipi (mappatura delle richieste). Questo valore è obbligatorio.

update

La update sezione consente di specificare un'espressione di aggiornamento che descrive come aggiornare l'elemento in DynamoDB. Per ulteriori informazioni su come scrivere espressioni di aggiornamento, consulta la documentazione di UpdateExpressions DynamoDB. Questa sezione è obbligatoria.

condition

Una condizione per determinare se la richiesta deve riuscire o no in base allo stato dell'oggetto già incluso in DynamoDB. Se non viene specificata alcuna condizione, la richiesta UpdateItem aggiorna qualsiasi valore esistente, indipendentemente dal suo stato attuale. È possibile specificare se recuperare l'elemento esistente quando il controllo delle condizioni non riesce. Per ulteriori informazioni sulle condizioni transazionali, consulta Espressioni delle condizioni di transazione. Questo valore è facoltativo.

Per DeleteItem, i campi sono definiti come segue:

table

La tabella DynamoDB in cui eliminare l'elemento. Il valore è una stringa del nome della tabella. Questo valore table è obbligatorio.

operation

L'operazione DynamoDB da eseguire. Per eseguire l'operazione DeleteItem DynamoDB, il valore deve essere impostato su DeleteItem. Questo valore è obbligatorio.

key

La chiave DynamoDB che rappresenta la chiave primaria dell'elemento da eliminare. Gli elementi DynamoDB possono avere una sola chiave hash o una chiave hash e una chiave di ordinamento, a seconda della struttura della tabella. Per ulteriori informazioni su come specificare un «valore digitato», consulta Sistema di tipi (mappatura delle richieste). Questo valore è obbligatorio.

condition

Una condizione per determinare se la richiesta deve riuscire o no in base allo stato dell'oggetto già incluso in DynamoDB. Se non viene specificata alcuna condizione, la richiesta DeleteItem elimina la voce indipendentemente dal suo stato attuale. È possibile specificare se recuperare l'elemento esistente quando il controllo delle condizioni non riesce. Per ulteriori informazioni sulle condizioni transazionali, consulta Espressioni delle condizioni di transazione. Questo valore è facoltativo.

Per ConditionCheck, i campi sono definiti come segue:

table

La tabella DynamoDB in cui controllare la condizione. Il valore è una stringa del nome della tabella. Questo valore table è obbligatorio.

operation

L'operazione DynamoDB da eseguire. Per eseguire l'operazione ConditionCheck DynamoDB, il valore deve essere impostato su ConditionCheck. Questo valore è obbligatorio.

key

La chiave DynamoDB che rappresenta la chiave primaria dell'elemento per il controllo delle condizioni. Gli elementi DynamoDB possono avere una sola chiave hash o una chiave hash e una chiave di ordinamento, a seconda della struttura della tabella. Per ulteriori informazioni su come specificare un «valore digitato», consulta Sistema di tipi (mappatura delle richieste). Questo valore è obbligatorio.

condition

Una condizione per determinare se la richiesta deve riuscire o no in base allo stato dell'oggetto già incluso in DynamoDB. È possibile specificare se recuperare l'elemento esistente quando il controllo delle condizioni non riesce. Per ulteriori informazioni sulle condizioni transazionali, consulta Espressioni delle condizioni di transazione. Questo valore è obbligatorio.

Aspetti da ricordare:

  • Solo le chiavi degli elementi della richiesta vengono restituite nella risposta, in caso di esito positivo. L'ordine delle chiavi sarà lo stesso dell'ordine degli elementi della richiesta.

  • Le transazioni vengono eseguite in qualsiasi modo. all-or-nothing Se un elemento di richiesta causa un errore, l'intera transazione non viene eseguita e vengono restituiti i dettagli dell'errore.

  • Nessun elemento di richiesta può scegliere come target lo stesso elemento. Altrimenti causeranno TransactionCanceledExceptionerrori.

  • Se l'errore di una transazione è TransactionCanceledException, il cancellationReasons blocco verrà popolato. Se il controllo delle condizioni di un elemento di richiesta fallisce e non è stato specificato returnValuesOnConditionCheckFailure come false, l'elemento esistente nella tabella viene recuperato e memorizzato in item nella posizione corrispondente del blocco cancellationReasons.

  • TransactWriteItemsè limitato a 100 articoli richiesti.

  • Questa operazione non è supportata se utilizzata con il rilevamento dei conflitti. L'utilizzo di entrambi allo stesso tempo può causare un errore.

Per il seguente esempio di modello di mappatura della richiesta:

{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "PutItem", "key": { "post_id": { "S": "p1" } }, "attributeValues": { "post_title": { "S": "New title" }, "post_description": { "S": "New description" } }, "condition": { "expression": "post_title = :post_title", "expressionValues": { ":post_title": { "S": "Expected old title" } } } }, { "table":"authors", "operation": "UpdateItem", "key": { "author_id": { "S": "a1" }, }, "update": { "expression": "SET author_name = :author_name", "expressionValues": { ":author_name": { "S": "New name" } } }, } ] }

Se la transazione ha esito positivo, il risultato della chiamata disponibile in $ctx.result è il seguente:

{ "keys": [ // Key of the PutItem request { "post_id": "p1", }, // Key of the UpdateItem request { "author_id": "a1" } ], "cancellationReasons": null }

Se la transazione fallisce a causa del fallimento del controllo delle condizioni della PutItem richiesta, il risultato della chiamata disponibile in $ctx.result è il seguente:

{ "keys": null, "cancellationReasons": [ { "item": { "post_id": "p1", "post_title": "Actual old title", "post_description": "Old description" }, "type": "ConditionCheckFailed", "message": "The condition check failed." }, { "type": "None", "message": "None" } ] }

Il messaggio $ctx.error contiene dettagli relativi all'errore. È garantito che le chiavi cancellationReasonssiano presenti in. $ctx.result

Per un esempio più completo, segui il tutorial sulle transazioni di DynamoDB AppSync con questo Tutorial: risolutori di transazioni DynamoDB.