serverless-express icon indicating copy to clipboard operation
serverless-express copied to clipboard

After middleware transiently not completed before lambda ends

Open akawalsky opened this issue 3 years ago • 0 comments

I recently ran into an issue where code that runs after a call to res.json in a given route is not guaranteed to be run before a lambda ends.

My use-case is as follows -

  1. PUT /posts/1
  2. handle database update in route
  3. return updated record to client using res.json
  4. as an after middleware, send event specifying something was changed to AWS SQS

In a regular express server, I expect that the code in step 4 would complete successfully. However, I believe that serverless-express is ending the invocation of the lambda before that code has a chance to complete under certain circumstances.

To be a little more clear, here is a set of logs that represents a successful invocation -

START RequestId: d884deec-393a-40d2-93b3-f302d8f0c7fa Version: $LATEST
queuing change event
change event successfully queued
END RequestId: d884deec-393a-40d2-93b3-f302d8f0c7fa

and here is a set of logs that represents an unsuccessful invocation -

START RequestId: 0a1fc1e7-c8a8-40b0-bf80-076ce4c922e6 Version: $LATEST
queuing change event
END RequestId: 0a1fc1e7-c8a8-40b0-bf80-076ce4c922e6

As you can see, under some circumstances, the lambda invocation ends before the process has a chance to complete writing to SQS.

Is it possible that this use-case is not well supported in serverless-express? Let me know if more information is needed or if I am obviously doing something wrong.

akawalsky avatar Jan 13 '23 07:01 akawalsky