AWS MQTT Websocket Pub/Sub with AWS IoT based on MQTT.js.
Recently AWS released support of WebSockets for IoT service. It is very easy to use as Pub/Sub message system for serverless web applications. You can post new messages from AWS lambda function
via http post request
and receive them as websocket messages on client.
npm i aws-mqtt-client --save
- Create an IAM role and asign predefined
AWSIoTDataAccess
policy. (It is better to use AWS Cognito to provide temporary credentials for the front-end application, you can also customize policy to allow access only to user specific topics). - Run AWS CLI command
aws iot describe-endpoint
to get IoT endpoint url. - Create
mqttClient
with AWS credentials.
import AWSMqtt from "aws-mqtt-client";
const mqttClient = new AWSMqtt({
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
sessionToken: AWS_SESSION_TOKEN,
endpointAddress: AWS_IOT_ENDPOINT_HOST,
region: "us-east-1"
});
- Connect and receive messages from your topic.
mqttClient.on("connect", () => {
mqttClient.subscribe("test-topic");
console.log("connected to iot mqtt websocket");
});
mqttClient.on("message", (topic, message) => {
console.log(message.toString());
});
- Publish a message.
mqttClient.publish(MQTT_TOPIC, message);
Complete MQTT.js API
Based on Serverless JS-Webapp Pub/Sub with AWS IoT article by Stefan Siegl. This library is a wrapper around MQTT.js npm package.