Step Function Choice Input/output mapping

0

Hi I have a step function that executes the lambda function first and then lambda simply returns the below output

"{\"job_status\": \"COMPLETE\"}"

Based on Job Status value next step to take decision to Complete OR Running

Here is step function:

{
  "Comment": "Create Macie Job for the file.",
  "StartAt": "CheckMacieJobStatus",
  "States": {
    "CheckMacieJobStatus": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "OutputPath": "$.Payload",
      "InputPath": "$",
      "Parameters": {
        "Payload.$": "$",
        "FunctionName": "arn:aws:lambda:us-west-2:<account_id>:function:lambdafunction_name:$LATEST"
      },
      "Retry": [
        {
          "ErrorEquals": [
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException"
          ],
          "IntervalSeconds": 2,
          "MaxAttempts": 6,
          "BackoffRate": 2
        }
      ],
      "Next": "Choice"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.job_status",
          "StringEquals": "RUNNING",
          "Next": "Wait120Seconds"
        },
        {
          "Variable": "$.job_status",
          "StringEquals": "COMPLETE",
          "Next": "Success"
        }
      ],
      "InputPath": "$.job_status"
    },
    "Wait120Seconds": {
      "Type": "Wait",
      "Seconds": 120,
      "Next": "CheckMacieJobStatus"
    },
    "Success": {
      "Type": "Succeed"
    }
  }
}

However after the first step, I am getting errors at the choice step. What am I missing here?

An error occurred while executing the state 'Choice' (entered at the event id #7). Invalid path '$.job_status' : Property ['job_status'] not found in path $
2 réponses
2

The error "Invalid path '$.job_status' : Property ['job_status'] not found in path $" suggests a mismatch between your Lambda function's output and what the Step Function expects. To fix this, ensure the Lambda output correctly aligns with the Step Function's expected input, particularly for the Choice state.

Given the structure of your Step Function, here are a few things to consider correcting the issue:

  • Confirm the Lambda returns {"job_status": "COMPLETE"} directly at the root of its JSON output.
  • If your Lambda output directly contains job_status at the root, ensure the OutputPath in the CheckMacieJobStatus state is "OutputPath": "$".
  • The InputPath in your Choice state might be unnecessary. Removing or adjusting it could resolve the error.

Corrected Step Function snippet:

"CheckMacieJobStatus": {
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "OutputPath": "$",
  ...
},
"Choice": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.job_status",
      "StringEquals": "RUNNING",
      "Next": "Wait120Seconds"
    },
    {
      "Variable": "$.job_status",
      "StringEquals": "COMPLETE",
      "Next": "Success"
    }
  ]
}

This assumes your Lambda function returns the expected structure. Align the Lambda's output or adjust the Step Function configuration accordingly.

profile picture
EXPERT
répondu il y a un mois
profile picture
EXPERT
vérifié il y a un mois
0
Réponse acceptée

by adding inputpath to $ fixed the issue>

{
  "Comment": "Create Macie Job for the file.",
  "StartAt": "CheckMacieJobStatus",
  "States": {
    "CheckMacieJobStatus": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "OutputPath": "$.Payload",
      "InputPath": "$",
      "Parameters": {
        "Payload.$": "$",
        "FunctionName": "arn:aws:lambda:${aws_region}:${aws_account_id}:function: lambdafunction_name ${environment}:$LATEST"
      },
      "Retry": [
        {
          "ErrorEquals": [
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException"
          ],
          "IntervalSeconds": 2,
          "MaxAttempts": 6,
          "BackoffRate": 2
        }
      ],
      "Next": "Choice"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.jobStatus",
          "StringEquals": "RUNNING",
          "Next": "Wait300Seconds"
        },
        {
          "Variable": "$.jobStatus",
          "StringEquals": "COMPLETE",
          "Next": "Success"
        }
      ],
      "InputPath": "$"
    },
    "Wait300Seconds": {
      "Type": "Wait",
      "Seconds": 300,
      "Next": "CheckMacieJobStatus"
    },
    "Success": {
      "Type": "Succeed"
    }
  }
}
répondu il y a un mois

Vous n'êtes pas connecté. Se connecter pour publier une réponse.

Une bonne réponse répond clairement à la question, contient des commentaires constructifs et encourage le développement professionnel de la personne qui pose la question.

Instructions pour répondre aux questions