Canned Actions

AWS StepFunction Visual Editor provides a “low code”, “drag and drop” development experience. As developer, we would like to take the same benefit, but in codes.

All available canned actions are defined in aws_stepfunction.actions.${action_name} name space. Feel free to submit feature request to support more canned actions.

[14]:
import aws_stepfunction as sfn
from rich import print

sfn.task_context.aws_account_id = "111122223333"
sfn.task_context.aws_region = "us-east-1"
[15]:
task_lambda_invoke = sfn.actions.lambda_invoke(
    func_name="my_lbd_func",
)
task_lambda_invoke.end = True
print(task_lambda_invoke.serialize())
{
    'Type': 'Task',
    'Resource': 'arn:aws:states:::lambda:invoke',
    'End': True,
    'Parameters': {'Payload.$': '$', 'FunctionName': 'arn:aws:lambda:us-east-1:111122223333:my_lbd_func'},
    'OutputPath': '$.Payload',
    'Retry': [
        {
            'ErrorEquals': ['Lambda.ServiceException', 'Lambda.AWSLambdaException', 'Lambda.SdkClientException'],
            'IntervalSeconds': 2,
            'BackoffRate': 2,
            'MaxAttempts': 3
        }
    ]
}
[16]:
task_ecs_run_task = sfn.actions.ecs_run_task(
    task_def="my-task:1",
)
task_ecs_run_task.end = True
print(task_ecs_run_task.serialize())
{
    'Type': 'Task',
    'Resource': 'arn:aws:states:::ecs:runTask.sync',
    'End': True,
    'Parameters': {
        'LaunchType': 'FARGATE',
        'Cluster': 'arn:aws:ecs:REGION:ACCOUNT_ID:cluster/MyECSCluster',
        'TaskDefinition': 'arn:aws:ecs:us-east-1:111122223333:task-definition/my-task:1'
    }
}
[17]:
task_glue_start_job_run = sfn.actions.glue_start_job_run(
    job_name="my_etl_job"
)
task_glue_start_job_run.end = True
print(task_glue_start_job_run.serialize())
{
    'Type': 'Task',
    'Resource': 'arn:aws:states:::glue:startJobRun.sync',
    'End': True,
    'Parameters': {'JobName': 'my_etl_job'}
}
[18]:
task_sns_publish = sfn.actions.sns_publish(
    topic="my_topic",
    message={"body": "something happens"},
)
task_sns_publish.end = True
print(task_sns_publish.serialize())
{
    'Type': 'Task',
    'Resource': 'arn:aws:states:::sns:publish',
    'End': True,
    'Parameters': {
        'TopicArn': 'arn:aws:sns:us-east-1:111122223333:my_topic',
        'Message': {'body': 'something happens'}
    }
}
[18]: