Implementing the Saga pattern for Lambda functions using Step Functions
Clone or download

README.md

lambda-saga-pattern

Implements the Saga pattern for Lambda functions using Step Functions.

The example is based on Catie McCaffrey's example in her talk on Applying the Saga pattern.

Each request has a compensating request for rollback.

The Saga goes like this:

Begin saga
  Start book hotel request
  End book hotel request
  Start book flight request
  End book flight request
  Start book car rental request
  End book car rental request  
End saga

We'll need a transaction log for the saga, and Step Functions would be our coordinator for the saga.

Because the compensating requests can also fail so we need to be able to retry them until success, which means they have to be idempotent.

This demo implements backward recovery only.

For forward recovery you also need to ensure the requests are imdempotent.

The code for the corresponding Step Function is here.

Deployment

To deploy this example to an AWS environment, run:

./build.sh deploy <stage> <region> <aws_profile>

which will install NPM packages and use the Serverless framework to deploy both DynamoDB tables as well as Lambda functions to the account.

To remove the demo, run:

./build.sh remove <stage> <region> <aws_profile>