AWS Step Functions cost vs self-hosted Temporal

Step Functions bills per state transition or per request and duration, while self-hosted Temporal moves cost into servers, a persistence database, visibility storage and people. The break-even depends on your execution volume, history size and operating model.

On this page

AWS Step Functions cost vs self-hosted Temporal: where the break-even sits

Step Functions cost grows with usage, while self-hosted Temporal cost is mostly fixed infrastructure plus skilled staff time and on-call. So the break-even depends on your transition or request volume, how long workflows run, and what an engineer costs in your organization. Start by pulling your current Step Functions bill for the last 12 months and splitting it into Standard charges, which are billed per state transition, and Express charges, which are billed per request and by duration. Take the list rates from AWS's pricing page for your region and tier, because no Step Functions price is set out here and rates change. Then model your monthly transition or request counts against those rates.

For the self-hosted side, the only price reference this page relies on is Temporal Cloud's pay-as-you-go pricing, which starts at 50 US dollars per million actions, with active storage at 0.042 dollars per GB-hour and retained storage at 0.00105 dollars per GB-hour, according to the Temporal Cloud pricing page. That figure is a managed-service benchmark, not the cost of running the open-source server. Your self-hosted cost is made of separate components: compute for the Temporal Server services, a persistence database (Cassandra, PostgreSQL or MySQL, per the supported versions), an Elasticsearch or OpenSearch cluster for advanced visibility, backups, monitoring, and the engineering time to upgrade and operate all of it. Ask vendors and your own platform team to quote each line, and confirm the Temporal persistence and visibility versions you plan to run.

Most of the uncertainty sits in staff time and on-call, which often outweighs infrastructure. Count the engineers who will own upgrades, since Temporal recommends moving one minor version at a time and running schema upgrades before server upgrades when release notes require them. Add the cost of securing the cluster, because self-hosted Temporal uses a noopAuthorizer by default, and that default allows every API request. Break-even moves toward self-hosting when transition volume is high and steady, when you already run the databases and search clusters, and when the team has Go or Java skills to operate code-based workflows. It moves back toward Step Functions when volume is low and the team is small. Run a two-week trial of both costs, including incident time, before you commit.

Which cost components move the comparison

This table sets each cost component of Step Functions against the matching self-hosted Temporal component, and marks whether it is paid once or recurs. Read the commercial column for what AWS bills by usage and the self-hosted column for what your team pays for in staff, infrastructure and operations. The main takeaway is that most of the Temporal cost is recurring people and infrastructure time, and the only priced Temporal comparison supplied is Temporal Cloud.

Cost componentCommercial side (Step Functions)Self-hosted side (Temporal)One-time or recurring
Standard transitionsBilled per state transition, so cost follows how many steps your state machines runNo per-transition fee; cost shifts to the cluster and database that absorb the same loadRecurring, scales with volume
Express requests and durationBilled per request and by duration, which suits high-volume short workflowsCovered by server compute and persistence sizing, driven by throughput and history sizeRecurring, scales with throughput
Temporal server computeNot applicable; AWS runs the serviceFrontend, history, matching and worker services on hosts or Kubernetes pods that you provision and scaleRecurring infrastructure
Persistence databaseNot applicable; state is held inside the AWS serviceSupported backends include Cassandra, PostgreSQL and MySQL; you size, back up and patch the databaseRecurring, plus one-time setup
Elasticsearch or OpenSearch visibilityExecution history is visible in the console within the service's own retentionAdvanced visibility needs a separate search cluster, which is a second system to run and sizeRecurring infrastructure
UpgradesAWS applies service changes; your effort is limited to state machine updatesServer upgrades one minor version at a time, with schema changes first where release notes require themRecurring, per release cycle
Engineering timeMostly definition work in Amazon States Language and IAMWorkflow code, activity code, testing and cluster work, which is the largest one-time cost in most migrationsOne-time build, then recurring maintenance
On-callHandled by AWS for the service; your team owns application failuresYour team owns cluster health, database failover and visibility store health, so on-call scope widensRecurring
Security hardeningCovered by AWS shared responsibility and IAM policies you already runNo authorization by default; you must configure mTLS, authorization, network isolation and payload encryptionOne-time setup, then recurring review

What moves the cost of each side

Step Functions bills by what your workflows do, while a self-hosted Temporal cluster bills by what you run and who runs it. The drivers below move one side or the other, and most of them affect both, so model them together before comparing totals.

Execution volume and transitions

Step Functions Standard bills per state transition, so every retry, Choice branch and Map iteration adds to the bill. Express bills per request and duration instead. On the Temporal side, volume mainly drives database write load, worker capacity and the size of the persistence tier, not a per-action fee. Ask your team to count transitions per execution from a typical month, then model the same workload as Temporal history events and worker throughput. Illustrative: a workflow with many retries costs more per run on Standard than a single-pass workflow, even if both finish the same business task.

Average history length per workflow

Temporal stores every event in a workflow's history, and long histories grow persistence storage, slow replay and increase the work each worker does when it resumes a workflow. Step Functions also charges more for longer state machines, so history length affects both sides in different ways. Measure the median and the tail of history length for your longest processes. Long-running processes that loop many times are where Temporal teams usually need Continue-As-New patterns or periodic restarts to keep histories bounded.

Retention window

Step Functions keeps execution history for a limited period, and most teams that move off it must export history before it expires. Self-hosted Temporal retention is set per namespace and is paid for in database storage and backups that you operate. Longer retention raises storage on your persistence database and any visibility index, and it also raises backup and restore time. Ask which records auditors or incident responders need, for how long, and whether that data should live in the workflow store or in your own archive.

Visibility query load

Visibility is how operators search and list workflow executions. Temporal's advanced visibility needs a separate store, and the docs recommend Elasticsearch or OpenSearch for anything beyond a few workflow executions. That index adds nodes, memory, disk and tuning work that Step Functions does not require from you. Frequent dashboards, customer-facing status queries or compliance searches increase this load. Confirm which query patterns you need before sizing the index, and check which visibility backend your target version supports.

Namespaces and environments

Each Temporal namespace is an isolation unit with its own retention and access settings, and every environment you add (development, test, staging, production, regulated sub-units) multiplies the services, databases and monitoring you run. Step Functions scopes state machines by account and Region, so teams often underestimate what separate Temporal namespaces and clusters cost to operate. Decide early whether you need one shared cluster with several namespaces or separate clusters per environment, and price the second option with its own persistence and on-call coverage.

Availability targets and on-call

A self-hosted cluster needs redundant frontend, history, matching and worker services, a highly available persistence database and tested backups. Temporal Cloud publishes an SLA of 99.9%, or 99.99% with high availability, and Step Functions runs on AWS infrastructure you already pay for. Your cost is the engineering and on-call time needed to reach the availability you commit to internally. Ask what uptime you have promised to business owners, who will be paged for a stuck workflow at night, and what a failover test costs in staff hours.

In-house Temporal skills

Temporal workflows are written as code, and operating the cluster requires people who understand its persistence, upgrades and security settings. Upgrades must move one minor version at a time, and schema changes must run before server upgrades when release notes require them. Teams without this experience usually pay for training, consulting or a retainer, while teams already running Go or Java services may absorb the work. Compare the cost of hiring or training two or three engineers against the Step Functions spend you expect to avoid, and ask any implementation partner to state the skills and hours in writing.

What a self-hosted Temporal cluster actually requires

A self-hosted Temporal cluster is more than one binary. The Temporal Server runs as a set of services that you can deploy with Docker Compose, with Go binaries, or with Helm charts that place each service in its own Kubernetes pod. Your team chooses the deployment method, and that choice decides who maintains the upgrade path, the monitoring and the scaling. Check that the Helm chart version matches the server image: the deployment documentation states that chart versions below 0.73.1 do not work with server images 1.30 and later. Plan for the Temporal Server itself to be upgraded one minor version at a time, which is recurring engineering work rather than a one-time install. The Temporal self-hosted deployment guide covers the supported layouts.

The second part is a persistence database. Temporal is tested on Cassandra, PostgreSQL 13 to 16 and MySQL, and SQLite is only for development and testing. The database is usually the largest standing cost after engineering time, because you pay for its compute, storage, backups, high availability and patching, either as a managed service or as a platform team's responsibility. Advanced visibility is a separate line. Elasticsearch 7 or 8, or OpenSearch 2 or later from Temporal Server 1.30.1, is recommended for anything beyond a few workflow executions, so you should budget a search cluster of its own with its own storage growth, index management and on-call coverage. Ask your team to confirm which visibility store the chosen server version supports before sizing either system.

Finally, treat the network layout as a control, not a default. The deployment documentation says Temporal services should run on hosts that are not reachable from the public internet, with access restricted to trusted internal networks. If no Authorizer is configured, the server uses a no-op authorizer that allows every API request. Before go-live, confirm that mTLS, the ClaimMapper, the Authorizer and OIDC single sign-on for the Web UI are configured through the Temporal self-hosted security guide. Each of these settings adds design and testing time, which belongs in your effort estimate alongside the database and visibility lines.

How to build the comparison with your own numbers

This sequence turns your current Step Functions bill into a comparable model for a self-hosted Temporal cluster, so the break-even point reflects your own volume, staffing and growth rather than a generic estimate.

  1. Export execution and transition volumes

    Pull monthly execution counts for each state machine from CloudWatch metrics and the AWS billing report, separating Standard and Express workflows because they are billed differently. Your cloud or finance team does this, and the output is a table of executions per month by state machine and workflow type, with the billed usage lines matched to each row. Confirm the exact billing dimensions with AWS pricing documentation for your region before you rely on the figures.

  2. Measure transitions and requests per workflow

    Sample recent executions in the Step Functions console or from execution history to count average state transitions per Standard execution, and average request count and duration for Express executions. Map the Map and Parallel states to their real fan-out, because iterations multiply transitions. The output is a per-workflow average that you multiply by the volumes from the previous step, and you should note which workflows have outliers that skew the mean.

  3. Size the Temporal cluster for the same load

    Translate the throughput into a Temporal sizing exercise with your platform engineers: frontend and history service capacity, worker counts for the activities that replace Lambda or service integrations, and the Kubernetes or Docker Compose footprint that the chosen deployment method needs. Confirm current sizing guidance and supported server versions in Temporal's deployment and upgrade documentation. The output is a node and pod plan with an estimated compute cost per month from your cloud provider's price list.

  4. Size the persistence database and visibility store

    Choose the supported persistence backend (Cassandra, PostgreSQL or MySQL, per the persistence docs) and estimate storage from your retained history volume and retention period. Add the advanced visibility store, which Temporal recommends as Elasticsearch or OpenSearch for anything beyond a few workflow executions, and price it as a separate managed or self-run service. Confirm supported versions in Temporal's visibility documentation. The output is a monthly line for database, backups, and search storage, plus the replica and backup policy you intend to run.

  5. Price staff time and on-call for your team

    Estimate the engineering hours for initial build, migration of workflow code, upgrades (Temporal recommends moving one minor version at a time), security hardening such as mTLS, authorization and network isolation, and ongoing on-call. Use your team's loaded hourly cost from HR or finance, not a market average. The output is a one-time migration cost and a recurring operations cost per month, and you should state which hours are funded by existing headcount and which require new hires or an external retainer.

  6. Add licensing and support lines

    List the lines that apply to your choice: the Temporal server is MIT licensed, so the software itself carries no license fee, but you still pay for infrastructure, staff and any support contract. If you compare against Temporal Cloud, take the pay-as-you-go rates from Temporal's pricing page and apply them to your action count. The output is a side-by-side table with self-hosted cost components and the managed service quote on the same volume.

  7. Run a volume growth sensitivity check

    Model the total cost at your current volume and at two or three higher growth levels that your product roadmap supports, because Step Functions costs scale with transitions while a Temporal cluster scales in steps. Mark the volume where the self-hosted total falls below the AWS total, including the one-time migration cost spread over your planning horizon. The output is a break-even chart by volume, and it should be reviewed by finance and the platform team together.

  8. Request quotes for the same volume

    Ask Temporal Cloud for a quote for the same action volume, retention and availability target, and ask AWS to confirm the Step Functions pricing for the same executions and transitions in writing. Ask any implementation partner for a fixed-scope quote based on your written requirements. The output is three reference points that you can compare against your self-hosted model, and the step is complete when every line in the model traces to a quote, a bill or a named internal estimate.

Costs teams forget on each side

Step Functions bills are easy to read on the invoice, but several charges sit in adjacent AWS services. Self-hosted Temporal moves the bill from a metered service to infrastructure and people, and most of those costs are invisible until a cluster is running in production.

CloudWatch logging charges

Step Functions can send execution logs to CloudWatch Logs, and log ingestion and storage are billed separately from state transitions. Verbose logging on high-volume state machines can cost more than the orchestration itself. Ask which log level is set, how long logs are retained, and whether execution history is being duplicated into a second store.

KMS and encryption calls

Standard workflows that use customer managed KMS keys to encrypt definitions or execution data generate key usage charges for each cryptographic request. These calls rise with execution volume and are easy to miss because they appear under KMS, not Step Functions. Confirm which keys are in use and how often they are called.

Cross-service calls

Each Lambda invocation, SQS message, DynamoDB request or API Gateway call made from a state machine is billed by its own service. In a fan-out pattern with Map or Parallel states, these downstream charges can exceed the transition count. Model the full call graph per execution, not only the state transitions, before comparing totals.

Database backups and failover tests

Temporal stores workflow history in a persistence database that you operate. Backups, point-in-time recovery and periodic failover drills are your responsibility, and they need compute, storage and staff time that Step Functions never asks for. Confirm the recovery targets with your own risk owners before choosing a database tier.

Visibility cluster operations

Advanced visibility on Elasticsearch 7 and 8 or OpenSearch 2 or later is recommended once executions grow beyond a few workflows, so you run a second distributed search cluster with its own sizing, index lifecycle, upgrades and monitoring. Budget for that cluster alongside the Temporal servers and database.

Upgrade planning

Temporal supports compatibility between successive minor versions only, so upgrades move one minor line at a time, starting with the latest patch of the current minor. Schema upgrades must run before server upgrades when release notes require it. Plan a staged test environment and a rollback path for every upgrade window.

Helm chart compatibility

If you deploy on Kubernetes, chart versions below 0.73.1 do not work with server images 1.30 and later. Chart and server versions must be pinned together and checked before each rollout. Ask your platform team who owns chart upgrades and how drift between environments is detected.

Authorizer and access control

With no Authorizer configured, self-hosted Temporal uses the default noopAuthorizer, which allows every API request without authentication or access control. Setting up mTLS, a ClaimMapper, an Authorizer and OIDC for the Web UI is required work that Step Functions handles through IAM. Treat this configuration as a launch blocker, not an optional hardening step.

Questions buyers ask before comparing cost

Is Temporal cheaper than Step Functions at low volume?

Usually not once you count the whole system. Step Functions Standard is billed per state transition, so a low-volume workflow has a small metered bill and no servers to run. A self-hosted Temporal cluster needs a server deployment, a persistence database and, for production visibility, Elasticsearch or OpenSearch, and those components cost money and staff time even when traffic is light. The Temporal server itself is MIT licensed, so the software is free to use, but the infrastructure and people around it are not. Ask your team to compare the fixed monthly cost of the cluster against the metered Step Functions bill at your real transition counts.

How much engineering time does self-hosting Temporal take?

The honest answer depends on your deployment method, your availability targets and how many teams share the cluster, so no fixed figure applies here. Work that recurs includes deploying the server through Docker Compose, Go binaries or Helm charts, sizing and operating the persistence database, keeping visibility storage healthy, configuring mTLS, authorization and OIDC single sign-on, and rotating credentials. Ask your platform team to estimate these tasks in hours per month and to name who carries the on-call rotation for the cluster.

Can our team run self-hosted Temporal without outside help?

A team with Kubernetes, database and security skills can run it, but the question is whether they have the capacity and the knowledge to do it safely. Temporal's self-hosted security documentation notes that without a configured Authorizer, the default noopAuthorizer allows every API request with no authentication, so hardening is a required first step, not an optional one. Many organizations bring in an implementation partner for the initial build, hardening and runbooks, then keep the platform in-house. DeployOpen plans, implements, hardens, backs up, documents and supports self-hosted platforms inside your own infrastructure, with a fixed scope agreed in writing before work starts, and ongoing support available as a retainer.

What drives the break-even point between Step Functions and self-hosted Temporal?

The break-even depends on the volume of transitions or actions, the length and count of your workflows, your uptime requirements and the fully loaded cost of the people who run the cluster. Step Functions cost grows with each state transition, while a self-hosted cluster costs mostly in fixed infrastructure and staff, so higher volume tends to favor self-hosting. Factor in visibility storage, since Temporal recommends Elasticsearch or OpenSearch for anything beyond a few workflow executions. Build a model with your own transition counts, retention needs and on-call load, and check the result with your AWS account team and your Temporal vendor or partner.

How do Temporal upgrades affect the operating budget?

Upgrades add recurring work, so include them in the operating budget. Temporal's upgrade guidance says to move one minor version at a time, to the latest patch of the current minor first, because backward compatibility is guaranteed only between successive minor versions. Schema upgrades must run before server upgrades when release notes call for them. The Helm chart version also matters, since chart versions below 0.73.1 do not work with server images 1.30 and later. Plan time for a test environment, a staged rollout and a rollback path each cycle, and confirm the upgrade cadence with your team before you commit to a support model.

Is Temporal Cloud a middle option between the two?

Yes, Temporal Cloud is a managed option that moves server operations to Temporal Technologies while you keep the Temporal programming model. Its published pay-as-you-go pricing starts at 50 US dollars per million actions, with active storage at 0.042 dollars per GB-hour and retained storage at 0.00105 dollars per GB-hour, according to Temporal's pricing page, and it lists a 99.9% SLA or 99.99% with high availability. Compare those metered charges with your self-hosted run cost, and ask Temporal directly whether current rates, regional hosting and data residency terms match your requirements, since pricing and terms can change.

What should we ask for in a quote for self-hosting Temporal?

Ask for a written scope that names each deliverable: deployment method, persistence and visibility design, security configuration, backup and restore testing, upgrade procedure, documentation and handover. Ask which items are one-time, such as the initial build and hardening, and which recur, such as support, upgrades and continuous testing. Request the assumptions behind any timeline, including the number of environments, the compliance evidence you need and who on your side approves changes. DeployOpen does not publish a price list, and a quote follows from the written scope.

What a migration adds to the one-time cost

A move from Step Functions to Temporal adds a one-time migration cost that sits on top of the recurring figures. The work has four parts: exporting the existing state machines, translating their states into workflow and activity code, running both systems side by side during cutover, and retiring the Step Functions resources afterward. Each part consumes engineering time, and the people doing it are usually the same platform engineers who also run the Temporal cluster. Ask whether that capacity is already committed to other work before you treat the migration as an add-on.

The export step is the most predictable. Each Amazon States Language definition has to be retrieved, along with the IAM roles, service integrations and any KMS-encrypted definitions it depends on. The translation step is where effort concentrates. Task, Choice, Wait, Parallel and Map states each become code, and callback patterns must be redesigned around Temporal signals. Count the state machines, the distinct service integrations and the callback patterns in your inventory first, because those three numbers drive most of the translation effort. The Temporal self-hosted deployment guide is the reference for the target environment, not a migration plan.

Parallel running is the cost teams most often underestimate. For the cutover period, both the Step Functions workloads and the Temporal cluster must be operated, monitored and staffed, and in-flight executions must either finish on Step Functions or be drained deliberately. Decide the cutover method per workflow before the first deployment, and confirm how long executions in your environment typically run, since that sets how long the old system must stay alive. For detailed sequencing, see the sibling pages on migrating from AWS Step Functions to Temporal and on exporting state machines from AWS Step Functions.

How DeployOpen scopes a fixed-price Temporal implementation

DeployOpen plans, implements, integrates, hardens, backs up, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For a move off AWS Step Functions, that means we start from a written scope that compares your current per-transition and per-request bill with the components of a self-hosted Temporal cluster, so the cost case is checked before anything is built.

How we scope

  • We inventory your state machines, execution volumes, run lengths and integrations before estimating anything
  • We separate Standard and Express workloads, since their billing and history behavior differ
  • Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts

How we build

  • We size the Temporal server, persistence database and visibility store as separate components in your environment
  • We configure mTLS, a ClaimMapper, an Authorizer and OIDC single sign-on instead of relying on the default open API
  • We test workflow retries, timeouts and failover against your existing error handling before cutover

How we hand over

  • You receive architecture records, runbooks for upgrades in one minor version at a time, and backup procedures
  • We document the cost model so your finance and platform teams can track each component after handover
  • We run parallel execution with your Step Functions workflows so both can be compared during cutover

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after the fixed-scope work ends
  • Retainers can cover Temporal server patch and minor upgrades, schema changes and persistence maintenance
  • Ask any implementation partner to confirm on-call coverage, response expectations and who owns each component

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.