Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
El documento de mapeo de TransactWriteItems
solicitudes le permite indicar al solucionador de AWS AppSync DynamoDB que realice TransactWriteItems
una solicitud a DynamoDB para escribir varios elementos, posiblemente en varias tablas. Para esta plantilla de solicitud, debe especificar lo siguiente:
-
El nombre de la tabla de destino de cada elemento de solicitud
-
La operación de cada elemento de solicitud que se va a realizar. Se admiten cuatro tipos de operaciones: PutItem,, y UpdateItemDeleteItemConditionCheck
-
La clave de cada elemento de solicitud que se va a escribir
Se aplican los límites de TransactWriteItems
de DynamoDB.
El documento de mapeo de TransactWriteItems
tiene la siguiente estructura:
{
"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 campos
- Los campos se definen de la siguiente manera:
-
-
version
-
La versión de la definición de plantilla. Solo se admite
2018-05-29
. Este valor es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
TransactWriteItems
, este valor se debe establecer enTransactWriteItems
. Este valor es obligatorio. -
transactItems
-
Los elementos de solicitud que se van a incluir. El valor es una matriz de elementos de solicitud. Se debe proporcionar al menos un elemento de solicitud. Este valor
transactItems
es obligatorio.Para
PutItem
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB de destino. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
PutItem
, este valor se debe establecer enPutItem
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que se desea colocar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.
-
attributeValues
-
El resto de los atributos del elemento que debe colocarse en DynamoDB. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este campo es opcional.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
PutItem
sobrescribe todas las entradas existentes para dicho elemento. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.
Para
UpdateItem
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB que se va a actualizar. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
UpdateItem
, este valor se debe establecer enUpdateItem
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que se va a actualizar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.
-
update
-
La sección
update
permite especificar una expresión de actualización que describe cómo se actualiza el elemento en DynamoDB. Para obtener más información sobre cómo escribir expresiones de actualización, consulte la documentación de UpdateExpressions DynamoDB. Esta sección es obligatoria. -
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
UpdateItem
actualiza todas las entradas existentes independientemente de su estado actual. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.
Para
DeleteItem
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB en la que se elimina el elemento. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
DeleteItem
, este valor se debe establecer enDeleteItem
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que se desea eliminar. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Si no se especifica ninguna condición, la solicitud
DeleteItem
elimina un elemento independientemente de su estado actual. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es opcional.
Para
ConditionCheck
, los campos se definen de la siguiente manera:-
table
-
La tabla de DynamoDB en la que se comprueba la condición. El valor es una cadena con el nombre de la tabla. Este valor
table
es obligatorio. -
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
ConditionCheck
, este valor se debe establecer enConditionCheck
. Este valor es obligatorio. -
key
-
La clave de DynamoDB que representa la clave principal del elemento que hay que someter a una comprobación de condición. Los elementos de DynamoDB pueden tener solo una clave hash o una clave hash y una clave de clasificación, dependiendo de la estructura de la tabla. Para obtener más información sobre cómo especificar un “valor con tipo”, consulte Sistema de tipos (mapeo de solicitud). Este valor es obligatorio.
-
condition
-
Una condición para determinar si la solicitud debe realizarse correctamente o no, en función del estado del objeto ya incluido en DynamoDB. Puede especificar si desea recuperar el elemento existente cuando se produzca un error en la comprobación de condiciones. Para obtener más información acerca de las condiciones transaccionales, consulte Expresiones de condición de transacción. Este valor es obligatorio.
-
-
Cosas que tener en cuenta:
-
Solo las claves de los elementos de solicitud se devuelven en la respuesta, si se realiza correctamente. El orden de las claves será el mismo que el orden de los elementos de solicitud.
-
Las transacciones se realizan de alguna manera all-or-nothing. Si algún elemento de solicitud causa un error, no se realizará la transacción completa y se devolverán los detalles del error.
-
No se pueden dirigir dos elementos de solicitud al mismo elemento. De lo contrario, provocarán TransactionCanceledExceptionun error.
-
Si se trata de un error en la transacción TransactionCanceledException, se rellenará el
cancellationReasons
bloque. Si se produce un error en la comprobación de condición de un elemento de solicitud y no se ha especificado quereturnValuesOnConditionCheckFailure
seafalse
, el elemento existente en la tabla se recuperará y almacenará enitem
en la posición correspondiente del bloquecancellationReasons
. -
TransactWriteItems
está limitado a 100 elementos de solicitud. -
Esta operación no se admite cuando se utiliza con la detección de conflictos. El uso de ambas al mismo tiempo generará un error.
Para la siguiente plantilla de mapeo de solicitud de ejemplo:
{
"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"
}
}
},
}
]
}
Si la transacción se realiza correctamente, el resultado de la invocación disponible en $ctx.result
es el siguiente:
{
"keys": [
// Key of the PutItem request
{
"post_id": "p1",
},
// Key of the UpdateItem request
{
"author_id": "a1"
}
],
"cancellationReasons": null
}
Si la transacción no se realiza correctamente debido a un error de comprobación de condición de la solicitud PutItem
, el resultado de la invocación disponible en $ctx.result
es el siguiente:
{
"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"
}
]
}
El $ctx.error
contiene detalles acerca del error. Los valores de keys y cancellationReasons estarán presentes sin duda en $ctx.result
.
Para ver un ejemplo más completo, siga el tutorial sobre transacciones de DynamoDB que se encuentra aquí Tutorial AppSync : solucionadores de transacciones de DynamoDB.