2017-06-26 78 views
0

我有一個AWS Lambda函數(由通過API網關進行的API調用觸發),它基於收到的參數使用IoT主題將消息發佈到相關IoT設備的集合(主題爲唯一標識特定物聯網設備的序列號)。我使用boto3的IoT數據平面客戶端方法publish()來執行此操作。我有沒有辦法讓這個相同的Lambda函數訂閱相同的IoT主題,以便它能夠接收來自IoT設備的響應?在AWS中訂閱AWS IoT主題Lambda

我知道,對於一個物聯網的消息觸發了lambda來創建一個調用拉姆達的物聯網規則操作,在規定的方式然而,這並沒有真正爲我工作(據我可以告訴)的原因是什麼我想要的是原始的Lambda(通過外部API調用API Gateway觸發的)來監聽IoT設備的響應,並基於此響應向外部調用者發送HTTP響應;如果它是一個獨立的Lambda,當物聯網設備對其IoT主題做出響應時觸發,這似乎不可行。任何想法如何做到這一點?

回答

0

儘管不太美觀,但這使我能夠完成我在我的問題中發佈的內容:我添加了一條IoT規則,可以將物聯網設備的響應彈出到SQS隊列上; Lambda(由API網關在開始時處理請求時調用)輪詢該SQS隊列中的消息,然後使用它構造並通過API網關將響應發送回發送HTTP POST的外部客戶端請求。可以肯定的是,這不是使用AWS Lambdas的好方法,但它似乎是使用Lambda + API網關將HTTP請求/響應與IoT發佈/訂閱掛鉤的唯一方法。

1

爲什麼它必須是原始的lambda?我猜想有一些你想要保存的狀態;在這種情況下,您應該堅持它或將它傳遞給消息。

+0

感謝 - 它不僅僅是因爲內部狀態本身而是原始的Lambda,而是因爲這就是通過API網關向Lambda發送HTTP POST請求的外部客戶端如何能夠將IoT設備的響應作爲HTTP響應(到它的HTTP請求)。如果物聯網設備的響應觸發不同的Lambda,原始的Lambda將無法返回響應,即外部客戶端的HTTP請求不會得到任何響應或空響應。 – Jupiterese

+1

感謝您的澄清。你在等什麼類型的迴應?聽起來更像是你需要設備和客戶端之間的網絡套接字。 –

+0

謝謝,我想你可能就在那裏。我目前通過將IoT設備的響應彈到SQS隊列上的IoT規則和Lambda輪詢來消除它隨後消耗的消息,使用它來構建響應並通過API網關將響應發回給發送HTTP POST請求的外部客戶端。 – Jupiterese