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回答
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
エキスパート
回答済み 1ヶ月前
profile picture
エキスパート
レビュー済み 1ヶ月前
0
承認された回答

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"
    }
  }
}
回答済み 1ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ