Integrate AWS Lambda in a Step Functions state machine with Amazon SQS and Amazon SNS - AWS Step Functions

Integrate AWS Lambda in a Step Functions state machine with Amazon SQS and Amazon SNS

This sample project demonstrates how to integrate AWS Lambda functions in Step Functions state machines.

In this project the Step Functions workflow uses Lambda functions to check a stock price and determine a buy or sell trading recommendation. The user is then provided this recommendation and can choose whether to buy or sell the stock. The result of the trade is returned using an SNS topic.

The state machine in this sample project integrates with AWS Lambda by passing parameters directly to the AWS resources that are deployed by the project. The project resources include an Amazon SQS queue to manage the request for human approval and an Amazon SNS topic to return the results of the query.

A Step Functions execution receives a JSON text as input and passes that input to the first state in the workflow. Individual states receive JSON data as input and usually pass JSON data as output to the next state. In this sample project, the output of each step is passed as input to the next step in the workflow.

To implement a human approval step, you typically pause the workflow execution until a task token is returned. In this project the workflow passes a message to an Amazon SQS queue. The message contains a task token and the output returned by the preceding step. This message triggers a Lambda function that's defined to handle callback functionality. The Lambda function is invoked with the payload of the message. The workflow execution pauses until it receives the task token back from a SendTaskSuccess API call. For more information about task tokens, see Wait for a Callback with Task Token.

For more information about Step Functions service integrations, see Integrating services with Step Functions.

For more information about IAM policies for Lambda, Amazon SQS, and Amazon SNS, see the following guides:

Note
  • This sample project may incur charges.

  • For new AWS users, a free usage tier is available. This tier offers free services below a certain level of usage. For more information about AWS costs and the free tier, see Pricing.

Step 1: Create the state machine

  1. Open the Step Functions console and choose Create state machine.

  2. Find and choose the starter template you want to work with. Choose Next to continue.

  3. Choose Run a demo to create a read-only and ready-to-deploy workflow, or choose Build on it to create an editable state machine definition that you can build on and later deploy.

  4. Choose Use template to continue with your selection.

Next steps depend on your previous choice:

  1. Run a demo – You can review the state machine before you create a read-only project with resources deployed by AWS CloudFormation to your AWS account.

    You can view the state machine definition, and when you are ready, choose Deploy and run to deploy the project and create the resources.

    Deploying can take up to 10 minutes to create resources and permissions. You can use the Stack ID link to monitor progress in AWS CloudFormation.

    After deploy completes, you should see your new state machine in the console.

  2. Build on it – You can review and edit the workflow definition. You might need to set values for placeholders in the sample project before attemping to run your custom workflow.

Note

Standard charges might apply for services deployed to your account.

Step 2: Run the state machine

  1. On the State machines page, choose your sample project.

  2. On the sample project page, choose Start execution.

  3. In the Start execution dialog box, do the following:

    1. (Optional) Enter a custom execution name to override the generated default.

      Non-ASCII names and logging

      Step Functions accepts names for state machines, executions, activities, and labels that contain non-ASCII characters. Because such characters will not work with Amazon CloudWatch, we recommend using only ASCII characters so you can track metrics in CloudWatch.

    2. (Optional) In the Input box, enter input values as JSON. You can skip this step if you are running a demo.

    3. Choose Start execution.

    The Step Functions console will direct you to an Execution Details page where you can choose states in the Graph view to explore related information in the Step details pane.

Congratulations!

You should now have either a running demo or a state machine definition that you can customize.