What is Lambda Function and Destinations
AWS Lambda function is a very well-known service that builds serverless applications. Since its inception in 2014, it has been adopted very well by developers and architects.
AWS serverless application comprises several components. However, Function is the backbone of it. Other AWS services interact with each other through Function, completing the serverless workflow.
1. Event Source: - Lambda Function doesn’t have a REST API endpoint. Hence, it cannot be
called directly from outside clients. It needs event triggering to get invoked. An event can be:
- Data record change of a DynamoDB table
- Request to a REST endpoint through API Gateway
- Change in the state of resource e.g. file uploaded to the S3 Bucket
It can also be triggered through CloudWatch Events. As Lambda has been evolving, it’s constantly adding many other types of events.
2. Function: - All the functional logic goes here. It does support many languages, including but not limited to Java, Go, Node, Python. The event source triggers it and then connects to all
other AWS Services to create a serverless pattern.
3. Services: - It can be either an AWS service or an external service. These services would be
required either to persist or retrieve the data from other systems. Some of the services like
SQS, SNS complements serverless flow with event-driven architecture.
In Nov 2019 reinvent, AWS announced a new feature in Lambda Function known as Lambda
Destinations. With Destinations, you can route asynchronous function results as an execution
record to a destination resource without writing additional code. An execution record contains
details about the request and response in JSON format including version, timestamp, request
context, request payload, response context, and response payload. For each execution status
such as Success or Failure, you can choose one of four destinations: another Lambda function, SNS, SQS, or EventBridge. Lambda can also be configured to route different execution results to different destinations.
What is Step Functions
AWS Step Functions is an orchestrator that helps to design and implement complex workflows. When we need to build a workflow or have multiple tasks that need orchestration, Step Functions coordinates between those tasks. This makes it simple to build multi-step systems.Step Functions is built on two main concepts Tasks and State Machine.
All work in the state machine is done by tasks. A task performs work by using an activity or an AWS Lambda function or passing parameters to the API actions of other services.
A state machine is defined using the JSON-based Amazon States Language. When an AWS Step Functions state machine is created, it stitches the components together and shows the developers their system and how it is being configured. Have a look at a simple example:
Lambda Destinations vs Step Functions
Topic
|
Lambda
Destination
|
Step
Functions
|
Sync
vs Async Invocation
|
It
supports only Async and Stream invocation
|
It
supports both sync and async flows. In either flow, need to call
StartExecution API.
|
Services
Supported
|
For
async, It supports only 4 destinations services Lambda, SQS, SNS, and EventBridge
(as of Jan 17, 2020)
For Stream invocation, It supports only SQS and SNS |
It
supports many more services other than the 4 like AWS Fargate,
SageMaker, ECS, Non-AWS workload and many
others.
|
Branching
-Parallel Processing
|
It
doesn't support parallel branching of execution
|
It
can support dynamic parallelism, so you can optimize the performance and
efficiency of application workflows such as data processing and task
automation. By running identical tasks in parallel, you can achieve
consistent execution durations and improve the utilization of resources to
save on operating costs. Step Functions automatically scales resources in
response to your input.
|
Branching
- Choice
|
For
Async invocation, It supports only success and failure conditions.
For Stream invocation, it supports only the failure condition. |
It
provides the feature to put any type of choice :
"Choices": [ { "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState" }, { "Variable": "$.foo", "NumericEquals": 2, "Next": "SecondMatchState" } ] |
Retry
|
It
does support Lambda function to retry for Asynchronous invocation before calling to Lambda Destinations. But it doesn't give feature to configure of
BackoffRate
|
It
has a Retry policy to handle Lambda failures:
"Retry": [ { "ErrorEquals": ["CustomError"], "IntervalSeconds": 1, "MaxAttempts": 2, "BackoffRate": 2.0 }, |
Conclusion
To summarize, both the services can co-exist as both have features that can be used in different scenarios. I would recommend starting with Lambda destinations service and see if that suffice your purpose as it will be much cheaper and requires less maintenance for small use cases. If it doesn't fulfill your need, you may go for Step functions.
No comments: