Amazon EventBridge:在数组中匹配对象

13

我遇到了定义匹配我的事件规则的问题。谷歌了,测试了。

假设我们有以下包含对象user在数组events中的事件:

{
    "version": "0",
    "...": "...",
    "detail": {
        "events": [
            {
                "user": {
                    "id": "5efdee60b48e7c1836078290"
                }
            }
        ]
    }
}

有没有办法在EventBus规则中匹配user.id? 我已经尝试使用以下无效规则:

有没有方法,在EventBus规则里匹配user.id呢? 我已经尝试过以下无效的规则:

{
  "detail": {
    "events": [
      {
        "user": {
          "id": [
            "5efdee60b48e7c1836078290"
          ]
        }
      }
    ]
  }
}
那么,
{
  "detail": {
    "events[0]": {
      "user": {
        "id": [
          "5efdee60b48e7c1836078290"
        ]
      }
    }
  }
}

同样没有影响。

我不想放弃,但是我已经很累了 ;)


"user"{中两种情况都不需要使用 :,所以应该写成"user": { - Marcin
@Marcin 这只是一个打字错误。已经修复了。 - dobeerman
3个回答

16

这个模式应该可以匹配到这个事件:

{
  "detail": {
    "events": {
      "user": {
        "id": [
          "5efdee60b48e7c1836078290"
        ]
      }
    }
  }
}

2
今天,EventBridge仅支持将简单值(字符串、整数、布尔值、null)与数组匹配。您可以在服务文档中阅读更多信息。

1
我尝试了一下你的示例,但无法使其工作。根据阅读EventBridge事件模式中的数组,我得出结论,不可能匹配具有复杂值的数组内部。
似乎确认这一点的引用是“如果事件中的值是一个数组,则模式与模式数组和事件数组的交集非空时匹配”。
并且从Event Patterns页面可知,“匹配值总是在数组中”。因此,如果您的模式是一个数组,并且事件中的值也是一个数组(这是您提供的示例),则执行基于“set”的交集测试。您的模式必须与整个数组条目匹配,而不仅仅是示例中的单个字段。

1
为了进行测试,SDK 中的 EventBridge 对象上有一个测试方法。https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EventBridge.html#testEventPattern-property - tsdorsey
1
最后,我使用 lambda 解决了这个问题,它充当我的数组数据的映射器,将其转换为一个新对象而不是数组,然后将该新对象作为事件发送到另一个事件总线。 - dobeerman
@dobeerman如果数组大小是10个元素,那么通过lambda进行映射将如何帮助?在这种情况下,lambda会发送10个不同的事件吗? - Aniket Kapse
@AniketKapse 它将只发送一个带有多个条目的事件。 - dobeerman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接