Last time I participated in workshops about AWS Step Functions. This service provided by AWS was created for implementing flow of our application and close the paths in state machine. This service can be created and maintained from Serverless Framework which is one of the most popular frameworks to manage cloud resources and applications. The mentors created a repository to start our journey and resolve tasks during 2 days workshop.
Advantages of step functions:
- allow us to manage many of services in our cloud applications (ex. lambdas)
- visualize steps and executed path
- easily to find logs, passed inputs/outputs
- ASL to declare step flow
- usage with frameworks as Serverless Framework
- developing locally (Serverless framework with plugin)
- move our thinking to implement our application as small possible steps
- possible to usage other aws services from steps declaration
Started repository: https://github.com/TheSoftwareHouse/tsh-academy-serverless
My repository: https://github.com/MarcinGladkowski/aws-step-functions-workshops
Step functions and Severless framework: https://www.serverless.com/guides/aws-step-functions
I will go through some examples/features
ASL - Amazon State Language
Most of examples in the documentation are in JSON bu using SF we can describe it in yml
The powerful of ASF we can see on more complicated flow. Below You can see the Choice type. Similary to switch() or match()
functions in programming languages. This is our first step of flow. As we can se there are some other keywords as
compare returned parameter.
Comment: "Scan user CV document for data" StartAt: checkFileType States: checkFileType: Type: Choice Choices: - Variable: $.extension StringEquals: "txt" Comment: Is a text file? Next: copyFileToExtractedBucket Default: extractData
Choice type allows to use other keywords to compare input.
For example NumericGreaterThan for numeric comparison
checkScore: Type: Choice Choices: - Variable: $.calculatedScore NumericGreaterThan: 100 Comment: Is a match? Next: saveToMatchedBucket Default: saveToRejectedBucket
The next one will be step with calling other service like textract:analyzeDocument.
AWS service we define like arn:aws:states:::aws-sdk:[service]:[apiAction]
extractData: Type: Task Resource: arn:aws:states:::aws-sdk:textract:analyzeDocument Parameters: Document: S3Object: Bucket: !Ref inputBucket Name.$: $.key FeatureTypes: - TABLES - FORMS ResultPath: "$.taskresult" Next: extractTe
Parallel step execution
The best thing is that we haven’t wait for all services using language mechanism of asynchronous execution. I this case the result of all parallel steps will be passed to calculateScore at once, like one event in lambda handler.
checkExperience: Type: Parallel Branches: - StartAt: checkNodeExperience States: checkNodeExperience: Type: Task Resource: !GetAtt checkNodeExperience-lambda.Arn End: true - StartAt: checkCloudExperience States: checkCloudExperience: Type: Task Resource: !GetAtt checkCloudExperience-lambda.Arn End: true - StartAt: checkItExperience States: checkItExperience: Type: Task Resource: !GetAtt checkItExperience-lambda.Arn End: true - StartAt: checkExcludeLists States: checkExcludeLists: Type: Task Resource: !GetAtt checkExcludeLists-lambda.Arn End: true Next: calculateScore
Full workflow implemented on workshop
Of course, the step functions has a lot of more features like graphical editor, executing in loops and others.