tutorial node aws node.js amazon-web-services websocket amazon-cognito aws-iot

node.js - node - aws-sdk npm



Cómo usar AWS IoT para enviar/recibir mensajes hacia/desde el navegador web (2)

Estamos intentando utilizar Internet of Things de Amazon Web Services (AWS IoT) para enviar mensajes desde / hacia un navegador web (por ejemplo:. Dado que AWS IoT admite JavaScript, esperamos que esto sea posible ...

Hemos buscado en la documentación de AWS IoT pero solo hemos encontrado ejemplos del lado del servidor (que exponen los secretos / claves de AWS ...)

¿Hay algún buen ejemplo de trabajo o tutorial para usar AWS IoT para enviar / recibir mensajes a través de WebSockets / MQTT en el navegador (por ejemplo: autenticación con AWS Cognito) ? ¡Gracias!


Aquí hay una muestra que usa un conjunto de identidades cognito en JS para conectarse, publicar y reaccionar a una suscripción.

// Configure Cognito identity pool AWS.config.region = ''us-east-1''; var credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: ''us-east-1:your identity pool guid'', }); // Getting AWS creds from Cognito is async, so we need to drive the rest of the mqtt client initialization in a callback credentials.get(function(err) { if(err) { console.log(err); return; } var requestUrl = SigV4Utils.getSignedUrl(''wss'', ''data.iot.us-east-1.amazonaws.com'', ''/mqtt'', ''iotdevicegateway'', ''us-east-1'', credentials.accessKeyId, credentials.secretAccessKey, credentials.sessionToken); initClient(requestUrl); }); function init() { // do setup stuff } // Connect the client, subscribe to the drawing topic, and publish a "hey I connected" message function initClient(requestUrl) { var clientId = String(Math.random()).replace(''.'', ''''); var client = new Paho.MQTT.Client(requestUrl, clientId); var connectOptions = { onSuccess: function () { console.log(''connected''); // subscribe to the drawing client.subscribe("your/mqtt/topic"); // publish a lifecycle event message = new Paho.MQTT.Message(''{"id":"'' + credentials.identityId + ''"}''); message.destinationName = ''your/mqtt/topic''; console.log(message); client.send(message); }, useSSL: true, timeout: 3, mqttVersion: 4, onFailure: function () { console.error(''connect failed''); } }; client.connect(connectOptions); client.onMessageArrived = function (message) { try { console.log("msg arrived: " + message.payloadString); } catch (e) { console.log("error! " + e); } }; }

Documentación para la llamada a credentials.get , aquí

Recuerde autorizar también su función de IAM para suscribirse / publicar. Aquí hay una muestra:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1::your/mqtt/topic" ] }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1::your/mqtt/topic" ] } ] }


En caso de que alguien más esté buscando una solución: aquí hay un tutorial que demuestra a través de una simple aplicación de chat cómo obtener actualizaciones en tiempo real en un front-end ReactJS usando Serverless y Websockets en AWS IOT. El código fuente del tutorial está disponible en Github .