2017-06-26 11 views
0

Ich habe eine AWS Lambda-Funktion (ausgelöst durch einen API-Aufruf über API-Gateway), die Nachrichten zu einer Sammlung von verwandten IoT-Geräten mit einem IoT-Thema basierend auf den empfangenen Parametern veröffentlicht (das Thema ist eine Seriennummer, die ein bestimmtes IoT-Gerät eindeutig identifiziert). Ich mache dies mit der IoT-Datenebenen-Client-Methode boto3 publish(). Gibt es eine Möglichkeit für mich, dieselbe Lambda-Funktion für dasselbe IoT-Thema zu abonnieren, damit sie die Antwort vom IoT-Gerät empfangen kann?Abonnieren AWS IoT Thema in AWS Lambda

Ich bin mir bewusst, dass der vorgeschriebene Weg für eine IoT-Nachricht, ein Lambda auszulösen, eine IoT-Regelaktion ist, die ein Lambda aufruft, aber das funktioniert nicht wirklich für mich (soweit ich das beurteilen kann) Ich möchte, dass das ursprüngliche Lambda (das vom externen API-Aufruf an das API-Gateway ausgelöst wird) auf die Antwort des IoT-Geräts lauscht und basierend darauf eine HTTP-Antwort an den externen Anrufer sendet. Dies scheint nicht erreichbar zu sein, wenn es ein separates Lambda ist, das ausgelöst wird, wenn das IoT-Gerät auf seinem IoT-Thema antwortet. Irgendwelche Ideen, wie man das macht?

Antwort

0

Obwohl nicht schön, dies ermöglicht mir zu tun, was ich in meiner Frage geschrieben: Ich habe eine IoT-Regel hinzugefügt, die die Antwort des IoT-Geräts auf eine SQS-Warteschlange zeigt; Das Lambda (das vom API-Gateway aufgerufen wurde, um die Anforderung beim Start zu verarbeiten) fragt die SQS-Warteschlange nach einer Nachricht ab, die es dann zum Erstellen und Senden einer Antwort über das API-Gateway an den externen Client verwendet, der den HTTP-POST gesendet hat anfordern. Sicherlich ist dies keine großartige Möglichkeit, AWS Lambdas zu verwenden, aber es scheint die einzige verfügbare Möglichkeit zu sein, das Lambda + API-Gateway zum Verbinden von HTTP-Anfragen/-Antworten mit IoT-Publish/Subscribe zu verwenden.

1

Warum muss es das Original Lambda sein? Ich schätze, da ist ein Zustand, den du retten willst; In diesem Fall sollten Sie entweder fortfahren oder es in den Nachrichten weitergeben.

+0

Danke - es muss das Original Lambda nicht wegen des internen Status per se sein, sondern weil der externe Client, der die HTTP POST-Anfrage an das Lambda via API Gateway sendet, die Antwort des IoT-Geräts als HTTP-Antwort erhalten kann (zu seiner HTTP-Anfrage). Wenn die Antwort des IoT-Geräts ein anderes Lambda auslöst, würde das ursprüngliche Lambda keine Möglichkeit haben, die Antwort zurückzugeben, d. H. Die HTTP-Anforderung des externen Clients würde keine Antwort oder eine leere Antwort erhalten. – Jupiterese

+1

danke für die Klarstellung. Auf welche Art von Antwort wartest du? klingt eher so, als ob Sie einen Web-Socket zwischen dem Gerät und dem Client benötigen. –

+0

danke, ich denke, du könntest genau dort sein. Ich klicke es gerade an, indem ich eine IoT-Regel habe, die die Antwort des IoT-Geräts auf eine SQS-Warteschlange überträgt und Lambda diese Warteschlange nach einer Nachricht abfragt, die dann verbraucht wird, um eine Antwort über das API-Gateway zu erstellen und zu senden externer Client, der die HTTP-POST-Anfrage gesendet hat. – Jupiterese