У меня есть AWS Lambda, которая публикует данные в теме A AWS IOT и ожидает результата, который будет опубликован в другой теме B.
Мне было интересно, как получить эти данные из темы B, когда вещь публикует их в уже запущенной лямбде.
Мне не удалось найти эквивалент get_thing_shadow для конкретной темы https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iot-data.html#id4
Например:
Lambda1 -> IOT, Тема A -> Thing
Лямбда1 ждет
Вещь -> IOT, Тема B
Lambda1 читает из темы B, а обновления говорят, что DB и умирает.
Мне было интересно, как это можно сделать.
По некоторым причинам мы больше не можем использовать IOT Shadow.
Текущая архитектура:
Лямбда1 -> Желаемая тень IOT -> Вещь
Lambda1 -> ждет 5 секунд
Lambda1 -> читает IOT Shadow Reported -> успех или неудача
Если сбой Lambda1 -> сбрасывает IOT Desired в старое состояние -> существует





Невозможно настроить IoT для отправки нового сообщения «уже запущенной» лямбде. Он всегда будет запускать новый вызов лямбда-функции. Разве предыдущее состояние уже не отображается в сообщении «Ошибка обновления тени Интернета вещей»? Разве вы не можете просто использовать эти данные в новом вызове, чтобы делать какие-либо обновления БД или что-то еще, что вам нужно?
AWS sdk для лямбда-выражений (например, boto3 для python) не поддерживает тему подписки. Поддерживает только тему публикации.
Если вы хотите подписаться на тему, вы должны использовать устройство sdk (исх. https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)
А затем вы можете публиковать и подписываться с помощью sdk устройства в лямбда-выражении.
Если вы не хотите использовать SDK устройства, вам нужно использовать redis или DynamoDB, как показано ниже.
ответное сообщение публикации устройства -> Правило AWS IoT запускает какое-либо действие (например, запись в БД) -> БД лямбда-опроса.
вызов lambda1 ожидает ответа от устройства iot, чтобы сообщить о действии. Так что я думаю, что мы все еще можем использовать отчет, чтобы узнать, произошло ли обновление.