skip to Main Content

I am looking to connect my Lambda with my Step Function, and cannot figure out why it will not startExecution.

SDK Code:

import AWS from "aws-sdk";
const stepfunctions = new AWS.StepFunctions({ apiVersion: "2016-11-23" });
interface Params {
  stateMachineArn: string;
  input: string;
}

export async function handler(event: any, context: object) {
  console.log("event.body", event.body);

  const params: Params = {
    stateMachineArn: process.env.STEP_FUNCTION_ARN,
    input: JSON.stringify(event.body),
    name: "testNameField",
  };

  console.log("PARAMS", params);

  stepfunctions.startExecution(params, (err: any, data: any) => {
    if (err) {
      console.log("THERE WAS AN ERROR", err);
      console.log("ERROR STACK", err.stack);
    } // an error occurred
    else {
      console.log("data", data);
    } // successful response
  });
}

Permissions:

Allow: states:DeleteStateMachine
Allow: states:StartExecution
Allow: states:CreateStateMachine
Allow: states:SendTaskSuccess
Allow: states:DeleteActivity
Allow: states:SendTaskHeartbeat
Allow: states:CreateActivity
Allow: states:SendTaskFailure
Allow: states:StopExecution
Allow: states:GetActivityTask
Allow: states:UpdateStateMachine
Allow: states:StartSyncExecution

Extra information:

  1. I have tried doing a "test" on the console for the lambda function,
    from which it succeeds. I’m not sure where else to look.
  2. In the step function, all the columns
    (Total/Running/Succeeded/Failed/Timed out/Aborted) are 0.
  3. The params console.log offers the correct information

2

Answers


  1. Chosen as BEST ANSWER

    Solution Code:

    const AWS = require("aws-sdk");
    AWS.config.update({ region: "eu-west-1" });
    const stepFunction = new AWS.StepFunctions();
    interface Params {
      stateMachineArn: string;
      input: string;
      name: string;
    }
    exports.handler = async (event: any) => {
      console.log(event);
      const stepFunctionParams = {
        stateMachineArn: process.env.STEP_FUNCTION_ARN,
        input: JSON.stringify({
          message: event.body,
        }),
        name: "name" + String(Date.now()),
      };
      try {
        const stepFunctionResponse = await stepFunction
          .startExecution(stepFunctionParams)
          .promise();
        return { statusCode: 200, body: "Success" };
      } catch (e) {
        console.log("Problem executing SF :", JSON.stringify(e));
        return {
          statusCode: 500,
          body: "Problem executing step function : " + JSON.stringify(e),
          headers: { "Access-Control-Allow-Origin": "*" },
        };
      }
    };
    

  2. Are there any error messages outputted from the console.log?

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search