How to use Retries and Timeouts with AWS Step Functions

Introduction

AWS Step Functions is a powerful service that allows developers to build and manage distributed applications and microservices using visual workflows. It enables developers to easily coordinate multiple AWS services into serverless workflows so they can build and update applications quickly and easily. One of the key features of Step Functions is the ability to set retries and timeouts for each step in the workflow. This lesson will provide a practical approach to learn how to use retries and timeouts with AWS Step Functions.

What are Retries and Timeouts?

Retries and timeouts are two important concepts when it comes to managing distributed applications and microservices. Retries are used to automatically retry a failed step in a workflow, while timeouts are used to limit the amount of time a step can take before it is considered a failure.

Retries are useful for ensuring that a workflow is resilient to transient errors, such as a service being temporarily unavailable or a network issue. Timeouts are useful for ensuring that a workflow does not get stuck in an infinite loop or take too long to complete.

Setting Retries and Timeouts in AWS Step Functions

AWS Step Functions allows developers to set retries and timeouts for each step in a workflow. This can be done using the AWS Management Console, the AWS CLI, or the AWS SDK.

Using the AWS Management Console

The AWS Management Console provides a graphical interface for setting retries and timeouts for each step in a workflow. To set retries and timeouts for a step, open the Step Functions console and select the workflow. Then, select the step and click the “Edit” button.

In the “Edit Step” dialog, you can set the number of retries and the timeout for the step. You can also specify the error codes that should trigger a retry, and the backoff strategy to use when retrying.

Using the AWS CLI

The AWS CLI can be used to set retries and timeouts for a step in a workflow. To set retries and timeouts for a step, use the aws stepfunctions update-state-machine command.

The command takes the following parameters:

  • --state-machine-arn: The ARN of the state machine.
  • --definition: The definition of the state machine, including the retries and timeouts for each step.
  • --role-arn: The ARN of the IAM role that will be used to execute the state machine.

For example, to set the retries and timeouts for a step in a state machine, you can use the following command:

aws stepfunctions update-state-machine \
  --state-machine-arn <state-machine-arn> \
  --definition '{
    "StartAt": "MyStep",
    "States": {
      "MyStep": {
        "Type": "Task",
        "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
        "Retry": [
          {
            "ErrorEquals": ["States.Timeout"],
            "MaxAttempts": 3,
            "IntervalSeconds": 10,
            "BackoffRate": 2.0
          }
        ],
        "TimeoutSeconds": 60
      }
    }
  }' \
  --role-arn <role-arn>

Using the AWS SDK

The AWS SDK can be used to set retries and timeouts for a step in a workflow. To set retries and timeouts for a step, use the updateStateMachine API.

The API takes the following parameters:

  • stateMachineArn: The ARN of the state machine.
  • definition: The definition of the state machine, including the retries and timeouts for each step.
  • roleArn: The ARN of the IAM role that will be used to execute the state machine.

For example, to set the retries and timeouts for a step in a state machine, you can use the following code:

const stepFunctions = new AWS.StepFunctions();

const params = {
  stateMachineArn: <state-machine-arn>,
  definition: {
    StartAt: "MyStep",
    States: {
      MyStep: {
        Type: "Task",
        Resource: "arn:aws:lambda:us-east-1:123456789012:function:my-function",
        Retry: [
          {
            ErrorEquals: ["States.Timeout"],
            MaxAttempts: 3,
            IntervalSeconds: 10,
            BackoffRate: 2.0
          }
        ],
        TimeoutSeconds: 60
      }
    }
  },
  roleArn: <role-arn>
};

stepFunctions.updateStateMachine(params, (err, data) => {
  if (err) {
    console.error(err);
  } else {
    console.log(data);
  }
});

Conclusion

In this lesson, we learned how to use retries and timeouts with AWS Step Functions. We saw how to set retries and timeouts using the AWS Management Console, the AWS CLI, and the AWS SDK. We also saw how retries and timeouts can be used to ensure that a workflow is resilient to transient errors and does not get stuck in an infinite loop or take too long to complete.

Share :