Step Functions
A step function event source tells maelstromd
to poll AWS for activity tasks using the GetActivityTask
API. If a task is received, the related
component is activated and the task input is sent to the component via HTTP POST. The task input is sent as the
POST body. If the component responds with a 200 status code, SendTaskSuccess
is called using the response body as
the output
field. If a non-200 response is returned, or if the request times out, SendTaskFailure
is called.
Errors
If a non-200 response is returned, SendTaskFailure
is called. You may optionally
set response HTTP headers for the “cause” and “error” to be sent back to AWS. These values will be
displayed in the step function UI.
See the SendTaskFailure docs for more info on these fields.
taskToken
is automatically set on the SendTaskFailure
call and cannot be
overridden.
HTTP Header | SendTaskFailure Field | Max Length |
---|---|---|
step-func-error | error | 256 |
step-func-cause | cause | 32768 |
Activity creation
maelstromd
will call CreateActivity
to resolve the ARN associated with the activity name, but you must
create the state machine and reference the appropriate ARNs in the activity states.
Activity state ARNs have the following naming convention:
arn:aws:states:<aws region>:<aws account id>:activity:<activity name>
Concurrency
You can control the number of tasks maelstromd
will dequeue at a time per activity.
For example, if you want your system to process no more than 10 tasks concurrently, set
maxconcurrency: 10
on the step function event source.
This is different than the maxconcurrency
setting on the component. The component setting specifies max concurrency
per instance of a component across all event sources, where the step function setting specifies the max concurrency
across ALL instances of the component that will originate from this event source.
Properties
Property | Description | Default |
---|---|---|
activityname | Name of step function activity to poll | None (required) |
path | Request path to POST to on component | None (required) |
maxconcurrency | Max tasks to process at a time across all maelstromd instances | 1 |
concurrencyperpoller | Concurrent messages to process per polling process | 1 |
Example
In the example below we register two activities: split
and sum
. split
uses the default concurrency settings, so
it will only process a single task at a time across the cluster. sum
specifies higher concurrency limits and will
process up to 10 tasks concurrently (5 per poller, for a max of 2 pollers).
components:
mywebapp:
image: example/myapp
eventsources:
split:
awsstepfunc:
activityname: split
path: /step/split
sum:
awsstepfunc:
activityname: sum
path: /step/sum
maxconcurrency: 10
concurrencyperpoller: 5