AWS Step Functions Map State报错:路径需指向数组的问题排查
AWS Step Functions Map State报错排查方向
1. 修正Map State的ItemsPath路径
报错提示$.File_List.Payload未指向数组,结合你的代码逻辑:
files-metadataLambda返回的结构是{'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
相关产品推荐
相关产品推荐

