Amazon EventBridge: сопоставление объекта внутри массива
Я застрял в проблеме с определением правила сопоставления моих событий. Погуглил, протестировал.
Скажем, у нас есть следующее событие, которое содержит объект user
в массиве events
:
{
"version": "0",
"...": "...",
"detail": {
"events": [
{
"user": {
"id": "5efdee60b48e7c1836078290"
}
}
]
}
}
Есть ли способ сопоставить user.id
в правиле EventBus? Я уже пробовал использовать следующее правило, которое недействительно:
{
"detail": {
"events": [
{
"user": {
"id": [
"5efdee60b48e7c1836078290"
]
}
}
]
}
}
тогда,
{
"detail": {
"events[0]": {
"user": {
"id": [
"5efdee60b48e7c1836078290"
]
}
}
}
}
тоже никакого эффекта.
Не хочу сдаваться, но мне это надоело;)
2 ответа
Этот шаблон должен работать, чтобы соответствовать этому событию:
{
"detail": {
"events": {
"user": {
"id": [
"5efdee60b48e7c1836078290"
]
}
}
}
}
Сегодня EventBridge поддерживает сопоставление только простых значений (строка, целое число, логическое значение, null) с массивом. Подробнее читайте в сервисной документации.
Я немного поигрался с вашим примером, но не могу заставить его работать. Основываясь на чтении массивов в шаблонах событий EventBridge, я должен сделать вывод, что сопоставление внутри массивов со сложными значениями невозможно.
Цитата, которая, кажется, подтверждает это: "Если значение в событии является массивом, тогда шаблон соответствует, если пересечение массива шаблонов и массива событий не пусто".
И со страницы " Шаблоны событий " "Соответствующие значения всегда находятся в массивах". Итак, если ваш шаблон является массивом, а значение в событии также является массивом (это приведенный вами пример), выполняется проверка пересечения на основе "набора". Ваш шаблон должен соответствовать всей записи массива, а не только одному полю, как в примере.