You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Step Functions Choice状态异常:Glue Job返回值无法正确跳转

解决AWS Step Functions中Glue Job返回值在Choice状态无法读取的问题

问题场景

在AWS Step Functions多步骤流程中,使用Glue Job验证数据库更新状态,脚本末尾返回布尔值True/False,期望在后续Choice状态updated_databases中根据该值跳转流程:返回True进入data_process,返回False进入end。但执行时提示错误:Invalid Path ‘$.base_validation.updated_databases’: The choice state’s condition path references an invalid value.

问题原因

使用arn:aws:states:::glue:startJobRun.sync资源时,Step Functions返回的结果是Glue JobRun的元数据(如JobRunId、执行状态等),并非Python脚本中return的布尔值。脚本返回值不会自动传递到状态机的上下文数据中,必须通过特定方式输出并配置提取逻辑。

解决方案

1. 修改Glue Job Python脚本,输出JSON格式结果

将脚本返回的布尔值以JSON格式打印到标准输出(stdout),这是Step Functions捕获Glue Job执行结果的关键方式:

import json

validate_databases_by_origin = validate_databases(databases, data_ref)
updated_databases = all([v == 'Updated' for v in validate_databases_by_origin.values()])
# 以JSON格式输出结果,便于Step Functions解析
print(json.dumps({"updated_databases": updated_databases}))
return updated_databases

2. 配置Step Functions的Glue Task,开启日志捕获并提取结果

修改database_validation_script任务的配置,添加日志开启参数和结果提取规则:

"database_validation_script": {
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "database_validation",
    "Arguments": {
      "--category.$": "$.Parameters.category",
      "--item.$": "$.Parameters.item",
      "--data_ref.$": "$.Parameters.data_ref",
      "--Year.$": "$.Parameters.Year",
      "--Month.$": "$.Parameters.Month",
      "--Day.$": "$.Parameters.Day",
      "--enable-continuous-cloudwatch-log": "true"  // 必须开启该参数,让Step Functions捕获日志输出
    }
  },
  "ResultSelector": {
    // 将捕获到的JSON字符串解析为布尔值
    "updated_databases.$": "States.StringToJson($.JobRunOutput.OutputValue).updated_databases"
  },
  "ResultPath": "$.base_validation",
  "Next": "updated_databases"
}

3. 保留原Choice状态配置(无需修改)

原Choice状态的路径$.base_validation.updated_databases现在可以正确获取到布尔值,配置保持不变:

"updated_databases": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.base_validation.updated_databases",
      "BooleanEquals": true,
      "Next": "data_process"
    }
  ],
  "Default": "end"
}

验证逻辑

修改完成后,Glue Job执行时会将JSON格式的结果输出到日志,Step Functions通过startJobRun.sync捕获该输出,经ResultSelector解析后存入状态机上下文的$.base_validation节点,后续Choice状态即可根据该布尔值正确跳转流程。

内容的提问来源于stack exchange,提问作者Kleiton Moraes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:23:11