AWS IoT Core is the platform that enables users to connect devices to AWS Services and other devices, secure data and interactions, and process and act upon device data
The Device gateway serves as the main entry point for IoT devices connecting to AWS. It is responsible for managing all active device communications and implements semantics for multiple protocols to ensure that devices are able to securely and efficiently communicate with AWS IoT Core. As of this moment, most buoys are connected using MQTT which allows for long-lived, bidirectional connections, enabling these devices to send and receive messages at any time with low latency. The device gateway is also a fully managed scalable infrastructure that can support up to a billion devices.
AWS IoT Core provides mutual authentication and encryption at all points of connection, this ensures that data is never exchanged between devices and IoT core without a proven identity. Since we are connected using MQTT, it uses a certificate-based authorization method.
AWS IoT core allows us to create, deploy, and manage certificates and policies for devices from the console or even through the use of an API. These certificates can then be provisioned, activated and associated with the relevant IoT policies that are configured using IoT Core. This is a powerful system as it allows us to revoke access to an individual device if we choose to do so.
The Rules engine is a powerful system that makes it possible to built IoT applications that gather, process, analyze, and act on data generated by connected devices without having to manage any infrastructure. The Rules Engine evaluates inbound messages published into AWS IoT core and allows us to deliver that data into another device or a cloud service. These rules can apply to data from one or many devices and it can take one or many actions in parallel.
Rules can be created in the management console using SQL-like syntax. Rules can also be authored to behave differently depending upon the content of the message. We can manipulate the body of the received data by inserting additional meta info. Or we could trigger an action based off thresholds within the data.