AWS Step Functions – Build Distributed Applications Using Visual Workflows
aws.amazon.com
aws.amazon.com
I was hoping they would do something like this, working with SWF has always felt unnecessarily complicated. The Java Flow Framework just felt like an awkward abstraction to me, but this makes a lot more sense.
Combine this with their new AWS Batch service and I think people are going to save countless man hours that would have otherwise been spent working on repetitive, undifferentiated code.
I rather like the idea of SWF, but its API is too low-level, it has poor tooling, and the workflow/activity versioning is awkward and makes the systems too rigid. I am glad that AWS is moving to data-driven workflow definitions, that means they can build much better operational tooling (like the GUI) to manage and understand workflow executions.
(1) Quickly get a visual overview of all your executions
(2) See how many workflows failed
(3) Drill down and see which specific step failed and the data that might have triggered the failure
(4) re-run specific workflows
It provides built in error handling, retries/backoff, and parallelization. These are all things you could code yourself, but at some point you would have built a workflow system. Not to mention that the infrastructure of the workflow system itself is managed for you, so you don't have to worry about that going down. You can write workflows that execute over days, weeks or months and not worry about what happens if your server goes down.It would also come in handy for mutli-language workflows. If your were interacting with a variety of third party APIs that had SDKs in different languages, you could quickly string together a Python Lambda, Java Lambda and some .NET code that used the long polling API.
It would be nice if it integrated seamlessly with Cloudwatch and X-Ray to provide a unified view of logging and tracing right from the same interface.
I also expect a more seamless integration with AWS Batch at some point. Could be useful for chaining together multiple independently maintained batch processes (video conversion, resizing, publish to youtube).
I personally use SWF for a 10 step e-commerce workflow that calls multiple API. It works great, but I could have developed it much more quickly using Step Functions if it were available at the time.
Are you asking why you wouldn't just write your own coordination code and not use a coordination service at all? The advantage is scaling and robustness. These workflows can run for days/weeks/months, and each step in the workflow can run on different hosts that are optimized for that step. And workflow state is handled by AWS, and so is basic workflow logic (retries, timeouts, event logging, etc.). Unlike Oozie, Luigi, etc., your workflow state is not coupled to any of your infrastructure, so it can survive all kinds of crazy situations (fleets dropping offline, replacing clusters, etc.).
With Step Functions it is now trivial for me to write a simple Python lambda to do the HTTP request and then have the state machine deal with retrying with an exponential backoff (30min, 2hr, 8hr) for as long as I want.
If you wrote that by hand you would either need a long running process or you would need to manage scheduling and state management yourself.
I was actually planning on doing something like this with lambda, but I was basically just going hack something together to fire the Lambda multiple times per day using CloudWatch Events and then use DynamoDB to keep track of whether or not I had already succeeded. This is much more elegant and robust and you get a visual overview and execution history for free.
> "IT process automation and run book software that improves service quality and customer satisfaction, and lowers costs by eliminating latency between silos, increasing first time right rate, enforcing standards, and delivering reports for ROI, audits and more."
Ugh, seriously HP? What a load of BS. What the hell does it do?
Compare that to the AWS description of Step Functions:
> "AWS Step Functions makes it easy to coordinate the components of distributed applications and microservices using visual workflows. Building applications from individual components that each perform a discrete function lets you scale and change applications quickly."
This is what the studio client looks like: http://www.www8-hp.com/us/en/images/auto_oo_studio_ss_tcm245...
This is factually not true. There are a number of fields where graphical programming interfaces have a long history of success.
Just look at LabVIEW & Operations Orchestration.