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

EventBridge管道传递DynamoDB流至Step Function时,如何将数组输入转为单个对象?

EventBridge管道传递DynamoDB流至Step Function时,如何将数组输入转为单个对象?

我之前也碰到过一模一样的问题!EventBridge Pipe哪怕把批量大小设成1,还是会把单个DynamoDB流事件包装成数组传给Step Function,确实有点坑。给你几个亲测有效的解决办法:

方法一:用EventBridge Pipe的输入转换器直接提取

你之前的思路是对的,只是可能模板的配置细节没搞对。按下面的步骤来配置Pipe的输入转换:

  1. 打开你的EventBridge Pipe配置页面,找到Input transformation部分
  2. 输入路径(Input Path)保持默认的$就行,不用修改
  3. 模板(Template)直接填写 <$[0]> —— 这个语法会直接提取输入数组的第一个元素(也就是你要的单个DynamoDB事件对象),作为Step Function的输入
    • 如果之后需要把这个对象包在payload字段里,那模板就写 {"payload": <$[0]>},注意这是合法的JSON格式,别写错符号

要是之前这么配还失败,建议检查下Pipe的权限有没有问题,或者看看CloudWatch日志里的具体错误信息,大概率是模板语法或者权限的小问题。

方法二:在Step Function的起始状态做转换

如果Pipe的输入转换器暂时搞不定,也可以在Step Function里处理。给起始状态加个Pass状态,专门用来提取数组元素:
在Pass状态的Parameters里这么写:

"Parameters": {
  "event.$": "$[0]"
}

这样后续的状态就能直接用$.event拿到单个事件对象了。如果不想用Pass状态,也可以用一个简单的Lambda函数来做同样的提取,不过Pass状态更轻量,不用额外资源。

补充说明

为啥会出现这种情况?其实是EventBridge Pipe的设计逻辑:不管你把批量大小设成多少,它都会把收集到的事件包装成数组传递,哪怕只有一个事件也不例外。所以必须做这一步转换才能拿到单个对象。

备注:内容来源于stack exchange,提问作者florian norbert bepunkt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:44:52