如何将Step Function结果传递给EventBridge Put Event
解决方案
要实现将$.metadata的内容传递给EventBridge,同时把相同数据传给下一个步骤,需调整EventBridgePutEvents任务的输入配置、事件详情映射及结果路径设置,确保输入原封不动向下传递:
修改后的代码
ingest_sfn["flatten_metadata"] = sfn.Pass( self, f"Flatten Metadata", input_path="$.metadata.result", result_path="$.metadata", ) ingest_sfn["put_event"] = sfn_tasks.EventBridgePutEvents( self, "Put Event", entries=[sfn_tasks.EventBridgePutEventsEntry( # 将当前步骤的输入(即$.metadata的内容)作为EventBridge事件的detail detail=sfn.TaskInput.from_json_path_at("$"), event_bus=event_bus_base, detail_type="MessageFromStepFunctions", source="step.function" )], # 指定步骤的输入为上一步处理后的metadata input_path="$.metadata", # 将任务执行结果存入不影响业务的字段,避免覆盖输入 result_path="$.event_put_result", # 输出保持步骤的原始输入(即metadata),传递给下一个步骤 output_path="$" )
关键配置说明
input_path="$.metadata":限定Put Event步骤只接收上一步flatten_metadata处理后的$.metadata数据作为输入,确保传递给EventBridge的是目标内容。detail=sfn.TaskInput.from_json_path_at("$"):把当前步骤的输入(也就是$.metadata的完整内容)直接映射为EventBridge事件的detail字段。result_path="$.event_put_result":将Put Event任务的执行响应(比如事件ID、状态等)存入额外字段,不会覆盖原输入数据;若不需要保留任务结果,也可设为result_path="$.null"直接丢弃。output_path="$":确保步骤输出就是原始输入的$.metadata数据,完全原样传递给下一个步骤。
如果希望整个状态机的全局输入保持不变(而非仅传递$.metadata给下一个步骤),可调整为如下配置:
ingest_sfn["put_event"] = sfn_tasks.EventBridgePutEvents( self, "Put Event", entries=[sfn_tasks.EventBridgePutEventsEntry( # 从全局输入中提取$.metadata作为事件detail detail=sfn.TaskInput.from_json_path_at("$.metadata"), event_bus=event_bus_base, detail_type="MessageFromStepFunctions", source="step.function" )], # 输入使用整个全局数据 input_path="$", # 丢弃任务执行结果,保持全局输入不变 result_path="$.null", # 输出整个全局输入,传递给下一个步骤 output_path="$" )
内容的提问来源于stack exchange,提问作者Leonardo Wildt
相关产品推荐
相关产品推荐

