Correo electrónico | nube@criptonube.com

¿Qué es AWS IoT Analytics?

AWS IoT Analytics es un servicio que como su nombre lo indica, pertenece a la familia de servicios IoT de Amazon Web Services. Este servicio recolecta, procesa, enriquece, almacena y analiza datos de gran volumen de IoT, sin que el usuario tenga que preocuparse por aprovisionar la infraestructura compleja que normalmente conlleva el tener una plataforma de análisis de IoT, pues este servicio es completamente administrado.

Los datos de IoT por lo general no tienen una estructura definida, al ser los orígenes muy variados: sensores, gateways, sistemas de terceros, etc., por lo que analizarlos con herramientas convencionales no es tan viable puesto que estas fueron diseñadas para procesar datos estructurados. Así mismo, los datos de IoT involucran mucho ruido: lecturas falsas, mensajes dañados y frecuencias irregulares de envío. Estos mensajes deben pasar por un proceso de limpieza previo a su almacenaje y futuro análisis, pues pueden llevar a conclusiones erróneas.

AWS IoT Analytics permite automatizar cada uno de los pasos para análisis de datos de IoT. El servicio puede transformar, filtrar y enriquecer los datos antes de almacenarlos. Estos datos almacenados pueden ser entonces posteriormente analizados por medio de consultas SQL ad-hoc o programadas, o bien llevar a cabo análisis más complejos por medio de aprendizaje automático.

¿Cómo funciona?

Internamente, AWS IoT Analytics tiene diversos componentes. Un esquema común de implementación es el que se puede ver en el siguiente diagrama:

Primero, tenemos el sensor o dispositivo que está tomando las mediciones en campo. Luego ese dispositivo envía las mediciones tomadas hacia AWS IoT Core, servicio que permite conectar millones de dispositivos de IoT a la nube de AWS y dirigir billones de mensajes hacia otros servicios sin necesidad de administrar la infraestructura. AWS IoT Core recibe entonces los mensajes y por medio de reglas los envía hacia un canal de AWS IoT Analytics. Un canalrecolecta y almacena data “cruda” (sin procesar) antes de publicarla en una pipeline. Esta data cruda es almacenada dentro de un bucket de S3. El tenerla almacenada permite no solo tener un backup de la información sino que cualquier mensaje puede ser procesado nuevamente si, por ejemplo, se necesita agregar un nuevo cálculo a mensajes tanto nuevos como viejos, o si se quiere revisar cuáles eran los valores originales en un mensaje antes de que este fuese procesado.

En una pipeline se definen la serie de pasos de procesamiento por las que debe pasar un mensaje. Estas actividades pueden ser:

  • Remover atributos de un mensaje
  • Seleccionar atributos de un mensaje
  • Añadir atributos a un mensaje
  • Calcular un nuevo atributo en un mensaje
  • Enriquecer un mensaje con información de IoT Core Registry (como el thingIdthingName o el billingGroupName)
  • Enriquecer un mensaje con información de IoT Core shadow (como el último estado reportado en el shadow, timestamp o el número de versión)
  • Filtrar mensajes condicionalmente
  • Transformar mensajes con una función Lambda

Cuando ninguna de las actividades “por defecto” dentro de la pipeline, un usuario puede escribir una función Lambda con código que procese el mensaje. Esta función Lambda puede ser invocada por batches de mensajes, donde estos batches pueden ser de 1 mensaje o en grupos de hasta 1000 mensajes.

El siguiente script de código en Python disponible en la documentación de AWS IoT Analytics (https://docs.aws.amazon.com/es_es/iotanalytics/latest/userguide/pipeline-activities-lambda.html), es un ejemplo de un procesamiento de mensajes a través de una función Lambda, que en en este caso, añade el URL de GMaps al mensaje, así como la temperatura en grados Fahrenheit.

import logging
import sys# Configure logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
streamHandler = logging.StreamHandler(stream=sys.stdout)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)def c_to_f(c):
return 9.0/5.0 * c + 32def lambda_handler(event, context):
logger.info("event before processing: {}".format(event))
maps_url = 'N/A'for e in event:
#e['foo'] = 'addedByLambda'
if 'location' in e:
lat = e['location']['lat']
lon = e['location']['lon']
maps_url = "http://maps.google.com/maps?q={},{}".format(lat,lon)if 'temperature' in e:
e['temperature_f'] = c_to_f(e['temperature'])logger.info("maps_url: {}".format(maps_url))
e['maps_url'] = maps_urllogger.info("event after processing: {}".format(event))return event

Luego de que el mensaje pasa por cada una de las actividades definidas, llega a un data store, que es otra capa de almacenamiento basada en S3 donde se almacenan los mensajes procesados. Luego, el usuario puede extraer datos del data store creando un dataset, donde un dataset extrae y almacena la información que se necesite aplicando una consulta SQL o ejecutando una aplicación contenerizada. También pueden crearse dataset schedules para que se ejecuten los queries o aplicaciones de manera automática, pudiendo definir frecuencias de 1 minuto, cada hora, diariamente, mensualmente, etc. De ese modo, el usuario tiene acceso a la data que necesita. Por ejemplo, en un data store pueden tenerse todas las mediciones de temperatura del último mes, pero a los operadores les son útiles únicamente las mediciones de la última semana, por lo que el dataset refleja exactamente este conjunto de datos.

En tanto el data store como el dataset, pueden definirse periodos de retención, por si desea mantenerse la información indefinidamente o bien eliminarla después de algún periodo en específico.

Finalmente, puede utilizarse Amazon Quicksight para crear visualizaciones que los usuarios puedan consultar activamente, y generen sus propios análisis, o implementen el forecasting dentro de Quicksight para predecir valores a futuro o detección de anomalías para percibir comportamientos extraños en los datos.

AWS IoT Analytics automatiza los pasos necesarios para analizar los datos de dispositivos de IoT, sin que el usuario deba preocuparse por la infraestructura necesaria. El servicio está completamente integrado con IoT Core para recibir los mensajes, o bien puede utilizarse Amazon Kinesis, S3 o aplicaciones de terceros a través del API BatchPutMessage. En IoT Analytics pueden procesarse, almacenarse y analizarse millones de datos para diferentes objetivos. Aplicaciones comunes son la agricultura inteligente, el mantenimiento predictivo o el monitoreo de procesos. Dentro de la documentación del servicio puede encontrarse una guía paso a paso para iniciar con el uso de AWS IoT Analytics y la creación de los canales, pipelines, data stores y datasets. https://docs.aws.amazon.com/es_es/iotanalytics/latest/userguide/getting-started.html

Autor: Andrea Monzón

Más temas que te pueden interesar: