Step Functions Standard Workflows cost $0.025 per 1,000 state transitions. At 10 million events per day with 5 steps each, that is $1,250 per day. Express Workflows cost $0.000001 per transition — the same workload costs $0.05 per day. Express Workflows support 100,000 executions per second, run up to 5 minutes, and replace the “glue Lambdas” most teams write to chain AWS services together.
⚡ TL;DR: Express Workflows: 100K/sec, 5 min max, $0.000001/transition, at-least-once semantics, CloudWatch Logs only. Standard Workflows: 2K/sec, 1 year max, $0.025/1K transitions, exactly-once, full execution history. Use Express for high-volume event processing, Standard for long-running critical workflows.
Express Workflow SAM template — event processing pipeline
Resources:
EventPipeline:
Type: AWS::Serverless::StateMachine
Properties:
Type: EXPRESS
Definition:
Comment: High-volume event processing
StartAt: ValidateEvent
States:
ValidateEvent:
Type: Task
Resource: !GetAtt ValidateFn.Arn
Retry:
- ErrorEquals: [States.TaskFailed]
MaxAttempts: 2
IntervalSeconds: 1
Catch:
- ErrorEquals: [ValidationError]
Next: HandleInvalid
Next: RouteEvent
RouteEvent:
Type: Choice
Choices:
- Variable: "$.type"
StringEquals: ORDER
Next: ProcessOrder
- Variable: "$.type"
StringEquals: PAYMENT
Next: ProcessPayment
Default: ProcessGeneric
ProcessOrder:
Type: Task
Resource: !GetAtt OrderFn.Arn
End: true
ProcessPayment:
Type: Task
Resource: !GetAtt PaymentFn.Arn
End: true
HandleInvalid:
Type: Task
Resource: !GetAtt DLQFn.Arn
End: true
Logging:
Level: ERROR
IncludeExecutionData: false
Destinations:
- CloudWatchLogsLogGroup:
LogGroupArn: !GetAtt Logs.Arn
Triggering Express Workflows synchronously and asynchronously
// Synchronous — wait for result
import { SFNClient, StartSyncExecutionCommand } from "@aws-sdk/client-sfn";
const sfn = new SFNClient({});
export const handler = async (event) => {
const { status, output, error } = await sfn.send(new StartSyncExecutionCommand({
stateMachineArn: process.env.STATE_MACHINE_ARN,
input: JSON.stringify(event),
}));
if (status === "FAILED") throw new Error(error);
return JSON.parse(output);
};
// Asynchronous at high volume:
// SQS → EventBridge Pipe → Express Workflow (parallel fan-out per message)
Parallel state — simultaneous Lambda invocations
EnrichInParallel:
Type: Parallel
Branches:
- StartAt: FetchUser
States:
FetchUser:
Type: Task
Resource: !GetAtt UserFn.Arn
End: true
- StartAt: FetchProduct
States:
FetchProduct:
Type: Task
Resource: !GetAtt ProductFn.Arn
End: true
- StartAt: CheckInventory
States:
CheckInventory:
Type: Task
Resource: !GetAtt InventoryFn.Arn
End: true
# All 3 run simultaneously — total time = max(branch durations)
Next: MergeResults
- ✅ Express for high-volume event processing, ETL, microservice orchestration under 5 min
- ✅ Standard for long-running workflows, exactly-once requirements, human approval
- ✅ Log only ERROR level for Express Workflows — full logging at volume is expensive
- ✅ Use Parallel state instead of fan-out Lambdas
- ❌ Never use Standard Workflows for high-volume event processing at scale
- ❌ Express Workflows do not appear in the Step Functions execution history console
Express Workflows pair naturally with Lambda Extensions for tracing across workflow steps. For the infrastructure connecting SQS to Express Workflows, EventBridge Pipes handle fan-out automatically. Monitor step durations using CloudWatch Insights on the Express Workflow log group. Official reference: Express Workflows documentation.
Master AWS Lambda
→ AWS Solutions Architect Course on Udemy — The most comprehensive AWS course covering Lambda, serverless patterns, and production architecture.
→ AWS Certified Solutions Architect Study Guide — Deep Lambda chapter covering cold starts, VPC, layers, and SnapStart.
Sponsored links. We may earn a commission at no extra cost to you.
Discover more from CheatCoders
Subscribe to get the latest posts sent to your email.
