Как использовать AWS IoT для отправки / получения сообщений в / из веб-браузера

Мы пытаемся использовать Amazon Web Services Internet of Things (AWS IoT) для отправки сообщений из / в веб-браузер (например:. Учитывая, что AWS IoT поддерживает JavaScript, мы ожидаем, что это возможно

Мы искали в документации AWS IoT, но только нашли примеры на стороне сервера (которые раскрывают секреты / ключи AWS …)

Есть ли хорошие рабочие примеры или учебные пособия для использования AWS IoT для отправки / получения сообщений через WebSockets / MQTT в браузере (например: аутентификация с помощью AWS Cognito) ? Спасибо!

    Вот пример, который использует пул идентификаторов cognito в JS для подключения, публикации и реагирования на подписку.

    // 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); } }; } 

    Документация для вызова credentials.get , здесь

    Не забудьте авторизовать роль IAM для подписки / публикации. Вот пример:

     { "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" ] } ] } 

    В случае, если кто-либо ищет решение: вот учебник, который демонстрирует с помощью простого приложения чата, как получать обновления в реальном времени в front-end ReactJS, используя Serverless и Websockets на AWS IOT. Исходный код учебника доступен в Github .