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

AWS Step Functions Map State报错:路径需指向数组的问题排查

AWS Step Functions Map State报错排查方向

1. 修正Map State的ItemsPath路径

报错提示$.File_List.Payload未指向数组,结合你的代码逻辑:

  • files-metadata Lambda返回的结构是{'File_List': [{"file":"name1"},...]},核心数组就是File_List本身
  • 状态机中metadata-step的ResultPath配置为$.File_List,执行后上下文数据的$.File_List就是Lambda返回的数组结构
  • 当前Map State的ItemsPath错误设置为$.File_List.Payload,但你的数据结构里不存在Payload嵌套,应改为$.File_List

注意你的CDK代码中原本设置的items_path=JsonPath.string_at("$.File_List"),但生成的JSON却是$.File_List.Payload,需检查CDK代码是否有后续修改或配置覆盖。

2. 修复WAIT_FOR_TASK_TOKEN模式的Lambda实现

metadata-step使用了waitForTaskToken集成模式,该模式要求Lambda必须调用Step Functions的SendTaskSuccess/SendTaskFailureAPI传递结果,而非直接return:

  • 你的当前Lambda直接return JSON字符串,会导致Step Functions无法正确获取结果,甚至触发超时
  • 修改Lambda代码示例:
import json
import boto3

stepfunctions = boto3.client('stepfunctions')

def lambda_handler(event, context):
    output_files = [{"file":"name1"},{"file":"name2"},{"file":"name3"}]
    task_token = event['taskToken']
    # 通过SendTaskSuccess传递结果
    stepfunctions.send_task_success(
        taskToken=task_token,
        output=json.dumps(output_files)  # 直接传递数组,或按需求构造结构
    )
    return

3. 验证状态机上下文数据

通过Step Functions控制台查看执行详情,检查metadata-step执行后的上下文数据:

  • 确认$.File_List是否存在且为数组类型
  • 排查是否意外出现Payload嵌套(可能是Lambda返回格式或状态机配置错误导致)

4. 检查OutputPath与ResultPath的组合影响

metadata-step设置了OutputPath="$"和ResultPath="$.File_List":

  • 该配置会将任务结果写入原输入的$.File_List字段,最终输出完整上下文
  • 确认原输入中是否已有$.File_List字段,避免数据覆盖导致结构异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:39:25