0

SigV4 또는 클라이언트 인증서를 지원하지 않는 클라이언트에서 AWS IoT MQTT 브로커를 게시/구독하려고하는데 사용자 이름과 비밀번호가있는 SSL 만 있습니다. 내가 말할 수있는 것부터는 불가능할 것이므로이 클라이언트를 통합하는 가장 좋은 방법은 무엇입니까?SSL을 사용하여 Amazon MQTT Broker에 연결

현재 클라이언트가 작동중인 CloudMQTT 브로커에 게시하고 있지만 음성 제어를 허용하기 위해 Amazon Echo/Alexa를 솔루션에 통합하여 대신 AWS IoT MQTT 브로커에 연결할 수있는 방법이 필요합니다. Alexa가 데이터를 게시했습니다 (Lambda 및 IoT Device Shadows 사용).

가장 좋은 방법은 SSL을 사용하여 클라이언트를 AWS MQTT에 연결할 수 없다는 것입니다. 인증서를 요구하기 때문입니다. cloudMQTT와 AWS MQTT를 연결해야합니까? 아니면 에코가 아마존보다 다른 MQTT 중개인에게 퍼블리시하게 할 수있는 방법이 있습니까?

이 그래도 꽤 복잡한 과정을 판명했다

https://aws.amazon.com/blogs/iot/how-to-bridge-mosquitto-mqtt-broker-to-aws-iot/

에 설명 된대로 브로커를 브리징

+1

람다 함수를 작성했다면 CloudMQTT 또는 본질적으로 액세스 할 수있는 라이브러리에 게시 할 수 있어야합니다 ... 그렇지 않습니까? –

+0

람다 함수는 단지 AWS IoT Device Shadow를 사용하고 상태를 업데이트하기 때문에 실제 퍼블리싱은 자동으로 발생합니다. 코드에서 명시 적으로 수행하지 않습니다. 나는 어제 이전에 AWS를 전혀 사용하지 않았기 때문에 AWS에 대해 아주 새롭다. 그래서 나는 정말 명백한 것을 놓치고 있을지 모른다. –

+0

브로커를 브리징하는 것처럼 보였으 나, 올바른 접근 방식이다 https://aws.amazon.com/blogs/ iot/how-to-bridge-mosquitto-mqtt-broker-aws-iot/ –

답변

0

은 하나 개의 가능한 솔루션입니다. 내가 설치 한 로컬 모스 트를 사용하여 브리징했는데 '알 수없는 오류'로 연결하지 못했습니다. 이 문제가 모질라의 최신 버전에 방금 나타났습니다. 대신 AWS Linux EC2 인스턴스에서 실행중인 mosquitto 브로커와 브리징을 시도했으며이를 사용하여 브리징에 성공했습니다.

내가 쓴 더 나은 해결책은 이미 사용하고있는 MQTT 브로커에 직접 게시하기 위해 람다 함수를 수정하는 것이다. 이를 위해 aws-sdk에없는 node.js 모듈 'mqtt.js'(또는 이와 유사한 라이브러리)를 포함시켜야합니다. 따라서 수행 방법을 이해하려면 약간의 독해가 필요합니다. AWS Lambda 웹 인터페이스 인라인 편집기를 사용하여 지금까지 코드를 작성했지만, 불행히도 외부 라이브러리를 포함 할 수는 없습니다. 대신 자신 만의 배포 패키지를 만들어야합니다.

다음은 자신의 배포 패키지를 만들기 시작하는 데 도움이 개 유용한 링크가 있지만 그들은 내가 아래에 언급 한 정보의 중요한 비트의 몇 누락 :

https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/

http://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

하드 드라이브의 파일에 코드를 작성한 다음 명령 행에서 npm-install을 사용하여 코드가있는 폴더에 필요한 종속성을 넣어야합니다. 그러면 전체 로트를 지퍼 링해야합니다 모든 것을 포함하는 최상위 폴더가 없습니다. 말하자면 코드가 zip의 루트에있는 폴더가 아니라 zip의 루트에 있어야합니다 (폴더를 포함하는 코드를 마우스 오른쪽 버튼으로 클릭하고 zip으로 보내는 경우 얻을 수있는 것입니다).

또한 언급되지 않은 점은 온라인 편집기에서 작업을 진행하는 경우 경로가 올바르게 해석 될 수 있도록 JavaScript 상단에 몇 줄을 포함해야한다는 것입니다. 다음을 추가해야합니다.

var child_process = require('child_process'); 
var path = require('path'); 

이 코드를 람다 함수 웹 편집기에 업로드하고 정상적으로 함수를 빌드 할 수 있습니다. 안타깝게도 더 이상 인라인 웹 편집기를 사용할 수 없으므로 다시 압축을 풀고 다시 업로드하여 변경해야합니다.

관련 문제