I would point very strongly to a data layer that is not well suited to the serverless architecture. You mention “transactions”, and what that usually means is a multi-step process where one thing is stored, then the next, then the next. In a serverless system, you would usually push the initial data into a queue, and then part-process, push the remaining data into a queue, part process and so on, until complete.
The key with all of this is that each step is isolated from the previous steps. This is vitally important because otherwise you have to build a multi-step transaction within a function.
This comes back to my point about the data layer again. You have to redesign your data layer to allow your application to function well. Your data should flow *through* your system. Another thing I didn’t mention because it’s a nuance that is not very obvious and takes some explaining is that your data should be unidirectional. Transactions by their nature are not unidirectional. They are “back and forth” and should be avoided.
I hope this answers your query. There’s a lot to unpack in there.