Skip to content
Back to main site

AWS Step Functions

Validate state-machine definitions and manage activity records. A state machine needs an IAM role; a freshly created one worked in Vera 1.2.2.

Plan: Pro37 of 37 operations implemented3Known differences

In Vera 1.2.0 preview, TestState reported success without evaluating a Pass Result, and Wait and SQS Task states stayed RUNNING in diagnostic runs.

Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.

Activate your license key and start the emulator with the Vera launcher, as in Activate Pro, then run this in a terminal of its own, from an empty scratch directory. It gives the official AWS CLI dummy credentials and a config file of its own, so no AWS account is needed and your own AWS profile isn't touched.

Terminal window
export VERA_ENDPOINT="http://localhost:5003"
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1
export AWS_SHARED_CREDENTIALS_FILE=/dev/null
export AWS_EC2_METADATA_DISABLED=true
export AWS_PAGER="" AWS_CLI_AUTO_PROMPT=off
unset AWS_PROFILE AWS_DEFAULT_PROFILE
unset AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
unset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAME
unset AWS_CONTAINER_CREDENTIALS_FULL_URI
unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
cat > vera-aws-config <<'EOF'
[default]
region = us-east-1
output = json
cli_binary_format = base64
s3 =
addressing_style = path
EOF
export AWS_CONFIG_FILE="$PWD/vera-aws-config"

When you've finished every example in this terminal, close it and delete vera-aws-config, not before.

Use the AWS CLI’s stepfunctions commands. The emulator serves the 2016-11-23 API over the AWS JSON protocol.

A state machine needs the ARN of an existing IAM role, and a role that doesn’t exist is rejected. In Vera 1.2.2, a freshly created role worked, and the tested Pass state returned its result. The example below validates a definition and manages an activity record, neither of which needs a role.

Write a definition with one Pass state to definition.json, and validate it:

Terminal window
cat > definition.json <<'EOF'
{"StartAt":"Prepare","States":{"Prepare":{"Type":"Pass","Result":{"domain":"example.net","executed":true},"End":true}}}
EOF
aws --endpoint-url "$VERA_ENDPOINT" stepfunctions validate-state-machine-definition --definition file://definition.json

The definition is valid, with no diagnostics. This checks one valid definition; it doesn’t run it, and it isn’t a test of every validation rule.

Output (selected fields)
{
"result": "OK",
"diagnostics": [],
"truncated": false
}

Create an activity, keeping its ARN in ACTIVITY_ARN, and describe it:

Terminal window
ACTIVITY_ARN=$(aws --endpoint-url "$VERA_ENDPOINT" stepfunctions create-activity \
--name vera-docs-activity --query activityArn --output text)
aws --endpoint-url "$VERA_ENDPOINT" stepfunctions describe-activity --activity-arn "$ACTIVITY_ARN"

describe-activity returns the activity. These are selected fields:

Output (selected fields)
{
"activityArn": "arn:aws:states:us-east-1:123456789012:activity:vera-docs-activity",
"name": "vera-docs-activity"
}

An activity is a record that workers poll for tasks. Creating one doesn’t start a worker or run the definition above.

To clean up, delete the activity and the definition file:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" stepfunctions delete-activity --activity-arn "$ACTIVITY_ARN"
rm definition.json
  • Definition validation: ValidateStateMachineDefinition answered OK, with no diagnostics, for a valid Pass definition.
  • Activities, created, described and deleted as records.
  • State machines with a fresh role. In Vera 1.2.2, a freshly created IAM role worked, and the tested Pass state returned its result.
  • Executions, in diagnostic runs on Vera 1.2.0 preview: where role records already existed, a Pass workflow computed its result, {"value":7}, and a Fail workflow ended FAILED with the error and cause it supplied. Other states have limits: see Limitations.
  • Also served, not checked in Vera 1.2.0 preview or Vera 1.2.0-rc.3: synchronous executions, stopping and redriving executions, task tokens, versions and aliases, map runs and tags.

The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.

  • Waits and task integrations didn’t finish in the diagnostic runs on Vera 1.2.0 preview. A two-second Wait state stayed RUNNING through five reads about one second apart. An SQS Task integration also stayed RUNNING and delivered no message while it was watched. That doesn’t prove every wait or task fails, but long-running workflows remain unverified.
  • Execution history is empty. In Vera 1.2.0 preview, GetExecutionHistory returned events as [] for both the completed Pass execution and the failed one.
  • TestState doesn’t evaluate a Pass state. In Vera 1.2.0 preview, a TestState request for {"Type":"Pass","Result":{"value":7},"End":true} with input {} returned SUCCEEDED with output {}, not the Pass result. Don’t use TestState in place of a real execution. Its API definition also puts a sync- prefix on the endpoint’s host name, so an SDK sends it to sync-localhost unless you turn host-prefix injection off for that client, for example with boto3’s Config(inject_host_prefix=False). The example doesn’t call TestState.

Every operation in AWS's published 2016-11-23 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean

OperationStatusNotes
CreateActivityImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Created the example's activity record and returned its ARN.
CreateStateMachineImplementedLocal observation: Vera 1.2.2, 8 November 2026 — worked with a freshly created IAM role, and the tested Pass state returned its result. Local observation: Vera 1.2.0 preview, 5 November 2026 — Rejected a role ARN that doesn't exist. Diagnostic runs that reused existing role records created Pass, Fail, Wait and SQS Task state machines.
CreateStateMachineAliasImplemented
DeleteActivityImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Deleted the example's activity record.
DeleteStateMachineImplemented
DeleteStateMachineAliasImplemented
DeleteStateMachineVersionImplemented
DescribeActivityImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned the example activity's ARN and name.
DescribeExecutionImplemented
DescribeMapRunImplemented
DescribeStateMachineImplemented
DescribeStateMachineAliasImplemented
DescribeStateMachineForExecutionImplemented
GetActivityTaskImplemented
GetExecutionHistoryKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned events [] for both a succeeded Pass execution and a failed Fail execution, in diagnostic runs that reused existing role records. Earlier testing also found no events for a succeeded execution.
ListActivitiesImplemented
ListExecutionsImplemented
ListMapRunsImplemented
ListStateMachineAliasesImplemented
ListStateMachineVersionsImplemented
ListStateMachinesImplemented
ListTagsForResourceImplemented
PublishStateMachineVersionImplemented
RedriveExecutionImplemented
SendTaskFailureImplemented
SendTaskHeartbeatImplemented
SendTaskSuccessImplemented
StartExecutionKnown differenceSource inspection: Earlier profile, 3 November 2026, with background processing off — Starts the execution RUNNING; it advanced when described. That doesn't establish what advances every execution. Local observation: Vera 1.2.0 preview, 5 November 2026 — In diagnostic runs that reused existing role records, a Pass workflow computed {"value":7} and a Fail workflow ended FAILED with the supplied error and cause. A two-second Wait stayed RUNNING through five reads about one second apart, and an SQS Task integration stayed RUNNING without delivering a message during the observation.
StartSyncExecutionImplemented
StopExecutionImplemented
TagResourceImplemented
TestStateKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — For a Pass state with Result {"value":7} and input {}, returned SUCCEEDED with output {}, without evaluating the Pass result. The operation's sync- host prefix means SDK callers need host-prefix injection turned off, or the request goes to sync-localhost.
UntagResourceImplemented
UpdateMapRunImplemented
UpdateStateMachineImplemented
UpdateStateMachineAliasImplemented
ValidateStateMachineDefinitionImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned result OK, no diagnostics and truncated false for a valid one-state Pass definition. Invalid definitions weren't checked.