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 Respuestas
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
EXPERTO
respondido hace un mes
profile picture
EXPERTO
revisado hace un mes
0
Respuesta aceptada

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"
    }
  }
}
respondido hace un mes

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas