Ядро AWS IoT: несколько вставок DynamoDB для одного сообщения MQTT

#amazon-web-services #amazon-dynamodb #aws-iot

#amazon-веб-сервисы #amazon-dynamodb #aws-iot

Вопрос:

Я использую ядро AWS IoT с правилом DynamoDB для темы MQTT. Моя полезная нагрузка JSON выглядит примерно так:

 {
  "car_id": 52,
  "timestamp": "2020-08-31 12:50:00",
  "passengers": [
    {
      "passenger_id": 143,
      "passenger_name": "Foo"
    },
    {
      "passenger_id": 144,
      "passenger_name": "Bar"
    }
  ]
}
  

Я хотел бы, чтобы правило IoT вставляло несколько строк в таблицу DynamoDB из этой полезной нагрузки, которая выглядела бы так:

 car_id    timestamp              passenger_id    passenger_name
52        2020-08-31 12:50:00    143             Foo
52        2020-08-31 12:50:00    144             Bar
  

то есть, по сути, выполняется объединение между внешними данными ( car_id , timestamp ) и внутренними строками ( passengers ) и вставка одной строки в базу данных для каждой passenger .

Есть предложения о том, как это сделать с помощью SQL-правила IoT? Возможно ли это?

Примечание: Я рассматривал возможность разбиения этого на несколько сообщений MQTT (по одному для каждого passenger ), но это сопряжено с риском того, что некоторые сообщения будут вставлены успешно, а некоторые нет. Я не хочу вставлять какие-либо записи, если не могут быть вставлены все записи для car .

РЕДАКТИРОВАТЬ: Связанный, но отдельный вопрос: возможно ли использовать шаблонные поля для таких вещей, как ${iot:Connection.Thing.ThingName} поле, которое вы можете использовать для политик?

Комментарии:

1. Я не уверен, что вы можете вставить 2 строки, используя одно действие правила (возможно, вы можете), но также может быть проще использовать Lambda для достижения вашей цели. Рассматривали ли вы этот вариант?

2. У меня есть, но, основываясь на предварительных расчетах, добавление туда лямбды увеличило бы общую стоимость как минимум на 20%.

3. Это говорит о том, что у вас должно быть довольно много поступающих данных. Лямбда — это дешево! Если это просто выполнение вставок, вы, вероятно, могли бы выполнить все это в течение 100 мс и 128 МБ оперативной памяти. Даже если стоимость возрастает, возможно, это лучше, чем делать что-то нетрадиционное или менее явное, поскольку это не похоже на обычный вариант использования действия правила ядра IoT.