Step Functions and SQS for Beginners

thrubit sqs

Amazon Web Services offers powerful tools for building scalable, event-driven applications. Two of the most widely used services are AWS Step Functions and Amazon SQS. Together, they allow developers to orchestrate workflows, process background jobs, and build highly resilient distributed systems.

If you are new to serverless architecture, this guide will walk you through what Step Functions and SQS are, why they work so well together, and how to build your first workflow using both services.

What Are AWS Step Functions?

AWS Step Functions is a workflow orchestration service that lets you coordinate multiple AWS services into visual state machines.

A Step Functions workflow is made up of states such as:

  • Task
  • Choice
  • Parallel
  • Map
  • Wait
  • Pass
  • Succeed
  • Fail

These states define how your application moves from one step to another.

Workflow Library

Browse 60+ ready-to-run Step Functions workflows

Real-world ASL templates for AI, finance, healthcare, gaming, and more — run locally with Thrubit.

Explore workflows

Instead of writing complex orchestration code manually, you define your workflow using Amazon States Language (ASL), a JSON-based language.

Common use cases include:

  • Order processing
  • ETL pipelines
  • AI workflows
  • Data enrichment
  • Approval systems
  • Event-driven architectures
  • Background job orchestration

What Is Amazon SQS?

Amazon Simple Queue Service (SQS) is a fully managed message queue service.

SQS allows applications to communicate asynchronously by placing messages into queues. Other services or applications can then process those messages independently.

This helps:

  • Decouple systems
  • Improve reliability
  • Handle traffic spikes
  • Prevent dropped requests
  • Scale workloads independently

There are two primary SQS queue types:

Standard Queues

Designed for maximum throughput and scalability.

Features:

  • Nearly unlimited throughput
  • At-least-once delivery
  • Best-effort ordering

Best for:

Start free. No AWS account needed.
ZERO AWS costs.

Download Thrubit and run your first state machine locally in under five minutes. No cloud setup, no IAM policies, no waiting.

  • Background processing
  • High-volume systems
  • Event pipelines

FIFO Queues

Designed for strict ordering and exactly-once processing.

Features:

  • Guaranteed message ordering
  • Deduplication support
  • Exactly-once processing

Best for:

  • Financial systems
  • Inventory workflows
  • Transaction processing

Why Use Step Functions With SQS?

Step Functions and SQS complement each other extremely well.

Step Functions manages orchestration and workflow logic, while SQS handles decoupled message delivery.

This architecture creates scalable, fault-tolerant systems.

Common patterns include:

PatternPurpose
Queue-based processingOffload heavy tasks
Async workflowsContinue processing later
Fan-out architecturesProcess many jobs independently
Retry bufferingPrevent service overload
Event-driven pipelinesConnect distributed systems

Beginner Architecture Example

Imagine an ecommerce system:

  1. Customer submits an order
  2. Step Functions validates the order
  3. Workflow sends a message to SQS
  4. Worker service processes payment
  5. Another service updates inventory
  6. Notifications are sent

This prevents the checkout system from waiting on slow operations.

How Step Functions Send Messages to SQS

AWS Step Functions has native service integrations for SQS.

You can send a message using the sqs:sendMessage integration.

Example Task state:

{
  "Type": "Task",
  "Resource": "arn:aws:states:::sqs:sendMessage",
  "Parameters": {
    "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/orders",
    "MessageBody.$": "$"
  },
  "End": true
}
JSON

This sends the current workflow payload directly into an SQS queue.

Understanding the Workflow

Here is what happens:

Step 1: Workflow Starts

Input enters the Step Functions state machine.

Example input:

{
  "orderId": "1001",
  "customer": "Jane Doe",
  "total": 149.99
}
JSON

Step 2: Step Functions Sends to SQS

The workflow pushes the payload into the queue.

Step 3: Worker Reads Message

A Lambda function, container, or EC2 worker consumes the message.

Step 4: Background Processing Occurs

The worker:

  • Processes payment
  • Sends emails
  • Updates databases
  • Calls APIs

Benefits of Using SQS in Step Functions

Improved Scalability

Queues absorb traffic spikes automatically.

Instead of overwhelming downstream systems, messages wait safely in the queue.

Better Reliability

If a service fails temporarily, messages remain in the queue until processing succeeds.

Decoupled Architecture

Your services no longer depend on each other running simultaneously.

Easier Error Handling

SQS supports:

  • Dead-letter queues
  • Visibility timeouts
  • Retries
  • Delayed processing

Cost Optimization

You only process workloads when needed.

This can dramatically reduce compute waste.

Tutorial: Build a Simple Step Functions + SQS Workflow

Let’s build a beginner-friendly example.

Step 1: Create an SQS Queue

Open AWS Console:

  • Navigate to SQS
  • Click Create Queue
  • Choose Standard Queue
  • Name it:
order-processing-queue
JSON

Copy the Queue URL.

Step 2: Create a Lambda Consumer

Create a Lambda function that reads SQS messages.

Example Node.js Lambda:

exports.handler = async (event) => {
    console.log("Received messages:", JSON.stringify(event));

    for (const record of event.Records) {
        const body = JSON.parse(record.body);

        console.log("Processing order:", body.orderId);
    }

    return { success: true };
};
JavaScript

Attach the SQS trigger to this Lambda.

Step 3: Create the Step Functions Workflow

Create a new state machine.

Use this ASL definition:

{
  "Comment": "Beginner Step Functions and SQS Example",
  "StartAt": "SendToQueue",
  "States": {
    "SendToQueue": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage",
      "Parameters": {
        "QueueUrl": "YOUR_QUEUE_URL",
        "MessageBody.$": "$"
      },
      "End": true
    }
  }
}
JSON

Replace:

YOUR_QUEUE_URL
JSON

with your actual SQS queue URL.

Step 4: Execute the Workflow

Start an execution with test input:

{
  "orderId": "5001",
  "customer": "Alice",
  "items": 3
}
JSON

The workflow sends the message to SQS.

The Lambda automatically receives and processes it.

Understanding MessageBody.$

This line is important:

"MessageBody.$": "$"
JSON

The .$ syntax tells Step Functions to inject JSON dynamically using JSONPath.

In this case:

  • $ means the entire workflow input

You could also send only part of the payload:

"MessageBody.$": "$.orderId"
JSON

Adding Retries

One major advantage of Step Functions is built-in retries.

Example:

"Retry": [
  {
    "ErrorEquals": ["States.ALL"],
    "IntervalSeconds": 2,
    "MaxAttempts": 3,
    "BackoffRate": 2
  }
]
JSON

This automatically retries failed states.

Dead-Letter Queues Explained

Dead-letter queues (DLQs) store failed messages.

If processing repeatedly fails:

  • Messages move into the DLQ
  • Developers can inspect failures later

This prevents lost jobs.

Common Beginner Mistakes

Sending Huge Messages

SQS has a message size limit of 256 KB.

Use S3 for larger payloads.

Forgetting Visibility Timeout

If visibility timeout is too short:

  • Messages may process multiple times

Not Handling Duplicate Messages

Standard queues can deliver messages more than once.

Applications should be idempotent.

Overcomplicating Workflows

Keep orchestration logic simple early on.

Real-World Use Cases

Companies use Step Functions and SQS for:

  • Video transcoding
  • AI pipelines
  • Ecommerce order processing
  • Data ingestion
  • Report generation
  • Batch processing
  • Machine learning workflows
  • Document processing

Using Step Functions and SQS Locally

One challenge beginners quickly discover is cloud debugging costs.

Testing workflows repeatedly in AWS can generate:

  • State transition charges
  • Lambda execution costs
  • SQS request costs
  • Logging charges

Modern orchestration teams increasingly develop workflows locally first.

Platforms like Thrubit allow developers to:

  • Run Step Functions locally
  • Execute real Lambda functions locally
  • Test SQS integrations without deploying
  • Debug workflows visually
  • Iterate instantly with ZERO AWS costs

This dramatically speeds up workflow development and reduces cloud debugging overhead.

Best Practices for Beginners

Keep Messages Small

Store large data externally and pass references.

Use Retries Carefully

Avoid infinite retry loops.

Monitor Queue Depth

Large queue backlogs may indicate bottlenecks.

Separate Workflow Logic From Processing Logic

Step Functions orchestrates.
Workers process.

Use DLQs Everywhere

Always plan for failure.

Using Step Functions and SQS Locally With Visual Debugging

One challenge beginners quickly discover is that debugging cloud workflows directly in AWS can become slow and expensive.

Every test execution may generate:

  • Step Functions state transition charges
  • Lambda execution costs
  • SQS request charges
  • CloudWatch logging costs

This becomes especially painful when developing queue-based workflows because debugging asynchronous systems often requires many repeated executions.

Modern orchestration teams increasingly shift workflow development to local environments first.

Platforms like Thrubit allow developers to run AWS Step Functions and SQS workflows locally with visual debugging tools designed specifically for orchestration development.

With Thrubit, developers can:

  • Run Step Functions locally
  • Execute real Lambda functions locally
  • Test SQS integrations without deployments
  • Visually trace workflow execution step-by-step
  • Inspect payload transformations between states
  • Debug retries, failures, and queue behavior
  • Iterate instantly with ZERO AWS costs

This is particularly valuable for beginners because queue-driven systems can otherwise feel difficult to debug in the cloud.

For example, you can:

  1. Start a local Step Functions execution
  2. Watch the workflow send a message to SQS
  3. Inspect the exact payload entering the queue
  4. Observe how downstream Lambda consumers process the message
  5. Replay executions immediately without redeploying

Instead of waiting for deployments and searching through multiple AWS consoles, local visual debugging keeps everything in one place.

As workflows grow more advanced with:

  • Parallel states
  • Map states
  • EventBridge integrations
  • Bedrock AI tasks
  • Nested workflows
  • Distributed queue consumers

local orchestration tools become increasingly important for development speed and cost control.

For many teams, the workflow becomes:

  • Develop locally
  • Debug visually
  • Deploy confidently to AWS later

This dramatically shortens the feedback loop for Step Functions and SQS development.

Free Trial