То, что вы испытываете, не является ошибкой - это на самом деле часть функции, и это было упомянуто в объявлении о запуске .
Товары не блокируются во время транзакции. Транзакции DynamoDB обеспечивают сериализуемую изоляцию. Если элемент изменяется вне транзакции во время выполнения транзакции, транзакция отменяется, и выдается исключение с подробностями о том, какой элемент или элементы вызвали исключение.
Вместо этого, вместо блокировки, DynamoDB использует то, что называется оптимистическим управлением параллелизмом (которое также (смешанно) называется оптимистической блокировкой). Если вы хотите узнать больше об этом, статья в Википедии о Оптимистическом управлении параллелизмом довольно хороша.
Возвращаясь к данному вопросу, документация AWS для транзакций гласит:
Несколько транзакций, одновременно обновляющих одни и те же элементы, могут вызвать конфликты, отменяющие транзакции. Мы рекомендуем следовать рекомендациям DynamoDB для моделирования данных, чтобы минимизировать такие конфликты.
Специально для TransactWriteItems они говорят:
Транзакции записи не выполняются при следующих обстоятельствах:
Когда текущая операция TransactWriteItems конфликтует с параллельным запросом TransactWriteItems для одного или нескольких элементов в операции TransactWriteItems. В этом случае одновременный запрос завершается с TransactionCancelledException
Аналогично для TransactGetItems:
Транзакции чтения не выполняются при следующих обстоятельствах:
Когда происходит текущая операция TransactGetItems, которая конфликтует с одновременным запросом PutItem, UpdateItem, DeleteItem или TransactWriteItems. В этом случае операция TransactGetItems завершается с ошибкой TransactionCancelledException