¿Por qué falla mi llamada a la API TransactWriteItems en Amazon DynamoDB?

Última actualización: 07-09-2022

Mi llamada a la API TransactWriteItems está fallando y quiero saber la causa del problema.

Resolución

Hay varios motivos por los que una solicitud de TransactWriteItems puede fallar o ser rechazada por Amazon DynamoDB.

No se cumple una condición en una de las expresiones de condición

Si no se cumple una condición que estableció para una de las operaciones en su solicitud de TransactWriteItems, todas las operaciones fallarán. TransactWriteItems es una operación de escritura sincrónica que agrupa hasta 25 solicitudes de acción. Por lo tanto, todas las solicitudes de acción se realizan correctamente o todas las solicitudes de acción fallan.

Si experimenta este problema, recibirá un mensaje de error similar al siguiente:

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

Para resolver este problema, asegúrese de que se cumplan todas las condiciones que estableció para su solicitud.

La tabla de la solicitud TransactWriteItems está en una región o cuenta diferente.

Las solicitudes de TransactWriteItems le permiten trabajar con elementos en diferentes tablas. Sin embargo, no puede trabajar con tablas que estén en diferentes regiones o cuentas. Asegúrese de trabajar con tablas que estén en la misma región que la cuenta desde la que realiza la solicitud TransactWriteItems.

Más de una acción de la operación TransactWriteItems gestiona el mismo elemento

Cuando más de una acción de la operación TransactWriteItems gestiona el mismo elemento, se produce un error en la solicitud y aparece un mensaje similar al siguiente:

"La solicitud de transacción no puede incluir varias operaciones en un artículo"

Por ejemplo, si TransactWriteItems intenta ejecutar una operación ConditionCheck y Put en el mismo elemento, la solicitud falla. Puede supervisar esta excepción de TransactionConflict mediante la métrica TransactionConflict para su tabla de DynamoDB en Amazon CloudWatch.

No hay suficiente capacidad aprovisionada para completar la transacción

Al igual que cualquier otra operación, una tabla de DynamoDB se puede limitar cuando se invoca la operación TransactWriteItems. Para obtener más información sobre cómo resolver este problema, consulte ¿Por qué se limita mi tabla de Amazon DynamoDB bajo demanda? y ¿Por qué se limita mi tabla de Amazon DynamoDB?

Se ha producido un error de validación

Si el tamaño de un elemento supera los 400 KB o un índice secundario local (LSI) se vuelve demasiado grande, se produce un error de validación. Del mismo modo, pueden producirse errores de validación debido a los cambios realizados por la transacción. Esto significa que la entrada no cumple una o más restricciones especificadas por el servicio de DynamoDB. El error de validación va acompañado de uno de estos mensajes, según la restricción que no se cumpla:

  • Uno o más valores de parámetros no son válidos.
  • La expresión update intenta actualizar la clave de índice secundaria más allá de los límites de tamaño permitidos.
  • La expresión update intenta actualizar la clave de índice secundaria a un tipo no admitido.
  • Un operando de la expresión de actualización tiene un tipo de datos incorrecto.
  • El artículo que se va a actualizar ha superado el tamaño máximo permitido.
  • Está intentando almacenar un número con una magnitud mayor que el rango admitido o un número desbordante.
  • Hay una discrepancia de tipos para que el atributo se actualice.
  • Los niveles de anidación han superado los límites admitidos.
  • La ruta del documento proporcionada en la expresión de actualización no es válida para la actualización.
  • La expresión proporcionada hace referencia a un atributo que no existe en el elemento.

DynamoDB limita el tamaño de cada elemento que puede almacenar en una tabla. Si su aplicación necesita almacenar más datos en un artículo de los que permite el límite de tamaño, comprima uno o más de los atributos más grandes. O bien, divida el elemento en varios elementos, indexados por claves de ordenación. También puede almacenar el artículo como un objeto en Amazon Simple Storage Service (Amazon S3). A continuación, guarde el identificador de objeto de Amazon S3 en el elemento de DynamoDB. Para obtener más información, consulte Prácticas recomendadas para almacenar artículos y atributos grandes.

El tamaño total de los artículos de una transacción supera los 4 MB

Las operaciones de TransactWriteItems no pueden superar los 4 MB. Este es un límite estricto. Para obtener más información, consulte el artículo transacciones de Amazon DynamoDB.

Se ha producido un error de usuario

Un error de usuario, como un formato de datos no válido, puede producirse por varios motivos. Por ejemplo, puede recibir un error 4xx para ResourceNotFoundException porque la operación TransactWriteItems no puede encontrar la tabla o el índice de DynamoDB subyacente. O bien, es posible que la tabla o el índice de DynamoDB no estén ACTIVOS.

Nota: Cuando utiliza el SDK de AWS SDK for Java (AWS SDK para Java), DynamoDB enumera los motivos de cancelación en la propiedad CancellationReasons. Esta propiedad no está configurada para otros idiomas. Los motivos de cancelación de transacciones se enumeran en el orden de los artículos solicitados. Si un elemento no tiene ningún error, muestra un código NONE y un mensaje nulo. Para obtener más información, consulte TransactWriteItems.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?