> For the complete documentation index, see [llms.txt](https://mamawhocode.gitbook.io/aws/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mamawhocode.gitbook.io/aws/services/integration/step-functions.md).

# Step Functions

coordination, orchestration for distributed applications

[Document](https://docs.aws.amazon.com/step-functions/) | [Workshop ](https://catalog.workshops.aws/stepfunctions/en-US)|

## Overview

* Similar to ***Microsoft Power Automate.*** A *<mark style="color:red;">GUI workflow</mark>*.
* Help build visual workflow to translate business requirements to technical requirements.
* Build apps fast, manage logic with `low-code`.
* Built-in try/catch, retry, rollback.
* Keywords: `orchestration`

## Features

### Workflow configuration

### Built-in service primitives

### AWS service integration

* Lambda, ECS, Fargate
* DynamoDB
* SNS, SQS
* AWS Batch, AWS Glue
* SageMaker

### Coordination of distributed apps

Can make http connection between app hosted on EC2, on-premises, mobile devices.

### Components reuse

### Built-in error handling

* Retry failed or time-out tasks.
* Response differently depend on type of error.

### History execution

## Cost

Pay for each *state transition*.

## Concepts

* ***Amazon State Language***: is a JSON-based, structure language use to define state machine.
* `"Type": "Parallel"` use to create parallel branches state machine.
* ***Task***: is a single unit of work and choice.
* ***State***: a `step` in the workflow
  * **Pass state**: debugging (just pass the input to its output, or inject some fixed data)
  * **Task state**: do some works in your state machine. eg.Lambda
  * **Choice state**: if-else statement
  * **Wait state**: delay for a certain amount of time
  * **Success state:** stop & mark as success
  * **Fail state:** stop & mark as failure.
  * **Parallel state**: create parallel branches of the same input
  * **Map state**: as LOOP statement (execute the same step for multiple entries)
* `HeartbeatSeconds`: maximum interval that the task will wait for a hearbeat signal. If an activity worker fails to send heartbeats within this interval, the state is failed. A retry policy on the state allows another activity worker to attempt to complete the state.

### **HeartbeatSeconds vs Wait State:**

* **HeartbeatSeconds**: This is a parameter used within a Task state to specify the maximum interval the task will wait for a heartbeat signal. If no heartbeat is received within this interval, the task is marked as failed and can retry based on a defined policy.
* **Wait State**: This is a state type used to introduce a deliberate delay in the execution of a state machine for a specified amount of time before transitioning to the next state. It is useful for adding pauses or delays in the workflow.

In essence, `HeartbeatSeconds` is about keeping a Task alive, while `Wait` state is about intentionally pausing the workflow.
