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 .