serverless-operations / serverless-step-functions

AWS Step Functions plugin for Serverless Framework ⚡️
Other
1.03k stars 204 forks source link

Discussion about Offline execution #105

Open ChristopheBougere opened 6 years ago

ChristopheBougere commented 6 years ago

This is a Feature Proposal

Description

What should be solved

Ability to execute a state machine locally. This would be really helpful to ease development. I'd like to open discussion on allowing resources creation using AWS StepFunctions API on a specific endpoint when an option is passed.

How can we achieve it

Using stepfunctions-local, anyone can start a local stepfunctions server which is AWS-API compliant (goal being to be as close as possible from the AWS engine, like with serverless-dynamodb-local and serverless-s3-local which are using local server with the same API).

Then we could either add an --offline/--local option to serverless invoke:

sls invoke stepf --name <stepfunctionname> --data '{"foo":"bar"}' --offline

or create a new subcommand invoke local (which would look like the official serverless invoke local for lambda):

sls invoke local stepf --name <stepfunctionname> --data '{"foo":"bar"}'

Instead of deploying resources to CloudFormation, this command would parse the stepfunction definition in serverless.yml and create resources using AWS StepFunctions API on the defined endpoint (like http://localhost:4584). Basically, we don't need IAM roles and we would have to:

Additional config

Similar or dependent PR:

Let me know your opinion on this, I would be happy to submit a PR if you're interested in this feature.

horike37 commented 6 years ago

Hi @ChristopheBougere, thank you for opening this issue :+1: Recently, serverless-step-functions-offline has been released for local development. How about use that?

ChristopheBougere commented 6 years ago

Hi @horike37 Here are some concerns I have with serverless-step-functions-offline. I think it can be really useful for a simple use case, but could be blocking on more complicated workflows.

theburningmonk commented 5 years ago

@ChristopheBougere AWS has also published a tool themselves for running Step Functions locally

hotgazpacho commented 5 years ago

While interesting, if you want an offline experience for your step functions, you still need to provide emulated services for, at a bare minimum, Lambda (but probably also DynamoDB, SQS, SNS, etc.).

Does anyone have a working setup for that?

Is LocalStack the answer for providing simulacra for those other services?

jkruse14 commented 5 years ago

I have a very basic package here: https://www.npmjs.com/package/serverless-offline-step-functions

It needs work, but is a good starting point and any feedback would be great

pianomansam commented 5 years ago

I just started on a plugin that supports step functions in serverless offline.

https://github.com/pianomansam/serverless-offline-stepfunctions

I also created a plugin to automatically start/stop the wonderful stepfunctions-local by @tristanbenier and @ChristopheBougere so we have a local Step Functions server:

https://github.com/pianomansam/serverless-offline-stepfunctions-local