Orchestrate Node functions using Amazon States Language
- AWS Step Functions - overview of Amazon States Language, use cases, etc
- statelint - a validator for Amazon States Language JSON files
- https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html
- https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html
$ npm install @wmfs/statebox --saveconstStatebox=require('@wmfs/statebox')conststatebox=newStatebox({})constmain=asyncfunction(){// STEP 1:// Create some 'module' resources (i.e. Javascript// classes with 'run' and optional 'init' methods)// that state machines can then refer to...// -------------------------------------------------awaitstatebox.readystatebox.createModuleResources({// Simple module to add two numbers togetheradd: classAdd{run(event,context){context.sendTaskSuccess(event.number1+event.number2)}},// Simple module to subtract one number from anothersubtract: classSubtract{// Init methods are optional, but all allow// resource-instances to be configured...init(resourceConfig,env,callback){callback(null)}run(event,context){context.sendTaskSuccess(event.number1-event.number2)}}})// STEP 2:// Next create a new 'calculator' state// machine using Amazon States Language...// ---------------------------------------awaitstatebox.createStateMachines({'calculator': {Comment: 'A simple calculator',StartAt: 'OperatorChoice',States: {OperatorChoice: {Type: 'Choice',Choices: [{Variable: '$.operator',StringEquals: '+',Next: 'Add'},{Variable: '$.operator',StringEquals: '-',Next: 'Subtract'}]},Add: {Type: 'Task',InputPath: '$.numbers',Resource: 'module:add',// See createModuleResources()ResultPath: '$.result',End: true},Subtract: {Type: 'Task',InputPath: '$.numbers',Resource: 'module:subtract',ResultPath: '$.result',End: true}}}},{},// 'env': An environment/context/sandbox)// STEP 3:// Start a new execution on a state machine// ----------------------------------------constexecutionDescription=awaitstatebox.startExecution({numbers: {number1: 3,number2: 2},operator: '-'},// input'calculator',// state machine name{}// options)// STEP 4:// Look at the results...// ----------------------console.log(executionDescription)// Result object// -------------// {// executionName: '...',// ctx: {// numbers': {// number1: 3,// number2: 2// },// operator: '-',// result: 1 <--- The important bit :-)// },// currentStateName:'Subtract',// currentResource:'module:subtract',// stateMachineName:'calculator',// startDate: '2018-09-03T21:58:04.287Z'// }}if(require.main===module){main();}$ npm test