Procesamiento: Módulo 4

AWS IOT CORE

AWS IoT Core es una plataforma que permite conectar varios dispositivos (“cosas”) a los servicios de aws y a otros dispositivos, que maneja el modelo de entrega de plataforma como servicio. Con lo que se puede adquirir la telemetría de diversos sensores, entendiendo por telemetría toda la información entregada por el sensor.

Para el envío de la información IoT Core emplea el protocolo MQTT; este protocolo trabaja bajo el modo de publicación-subscripción. Teniendo una latencia mínima y un ancho de banda reducido, lo que se traduce en un servicio diseñado para tolerar conexiones intermitentes y disminuir los requerimientos de ancho de banda. Lo que a su vez garantiza la eficiente transferencia de la telemetría del sensor a IoT Core.

AWS IoT Core trabaja bajo la siguiente arquitectura:

“Thing Registry”, permite registrar el dispositivo generando la metadata del dispositivo. Consecuentemente genera los certificados de acceso al dispositivo, lo que valida Device Gateway para que autorice el envío de la información. Los mensajes validados son enviados mediante MQTT hasta IoT Message Broker, que a su vez envía automáticamente los mensajes a IoT Rules Engine, que recibe el mensaje y toma acciones para derivarlos a los diversos servicios de AWS. La trama de datos pueden enviarse a varios servicios a la vez. El canal de comunicación es bidireccional, desde Device Shadow se pueden emitir instrucciones para cambiar el modo de funcionamiento del dispositivo de ser necesario.

Ejemplo de configuración y conexión:

Se comunican los datos obtenidos del sensor, mediante una raspberry con AWS Cloud a través de la creación de un objeto en AWS IoT, generación de certificados, creación de stream y lectura de datos con Python, este proceso se lo puede encontrar detalladamente a continuación:

Laboratorio Iot Core

1. Se crea un objeto en AWS IoT, ingresando a la consola AWS. Se le coloca un nombre, en este caso raspberry-dht11.

2. Se generan los certificados, en el proceso de creación del objeto, con el objetivo de autentificar la conexión de la instancia Raspberry/ Ec2 con AWS IoT, se deben descargar todos los certificados y también la CA raíz para AWS IoT (AmazonRootCA1.pem).

3. Generamos una política para asociarla al certificado, se define el nombre pol-raspberrydht11 en este caso, con la acción “iot*” indicamos que se seleccionarán todas las políticas de iot, en el apartado ARN de recurso se coloca la opción “*” para seleccionar todas las opciones, finalmente marcamos permitir y crear

4. Regresamos a la opción Certificados, damos clic en la opción asociar política al certificado creado según los pasos anteriores, se selecciona la política que se ha creado (pol-raspberrydht11) para asociarlo.

5. Como último punto se debe ingresar al objeto y seleccionar la opción de interactuar para obtener el punto de enlace HTTPS de API REST, el cual se debe copiar para el siguiente paso.

6. Se accede al servicio kinesis data stream, para crear un stream de nombre stream-raspberry, con un shard.

7. Se abre la instancia EC2, donde se generará la carpeta labiot que contendrá los certificados descargados, el achivo Python SendDataIoT.py y ReadKinesisIoT.py

8. Modificamos las líneas de código del archivo SendDataIoT.py, donde añadimos la url del paso 5, cambiamos el nombre y clave de acuerdo a nuestro certificado, ejecutamos el archivo con python3 SendDataIoT.py

9. Regresamos al servicio AWS IoT y visualizamos los datos que generamos en la EC2.

10. Para enviar datos de AWS IoT a Kinesis Data Streams, creamos una regla, que se llamará SenKinesis y en la pantalla de SELECT colocamos iot-sensor/test, añadimos la acción de Enviar un mensaje a un flujo de Amazon Kinesis, seleccionamos el stream que hemos creado y en clave de partición añadir ${newuuid()}

11. Creamos un rol y añadimos la acción a la regla, finalizando la creación de la regla.

12. Ejecutamos en el Python el comando python3 ReadKinesisIoT.py y se visualizará los datos enviados al Kinesis data stream

S3:

Es un sistema de almacenamiento de objetos, que cuenta con tolerancia a fallos, escalabilidad, disponibilidad de datos, seguridad y rendimiento. Este servicio está diseñado para ofrecer una durabilidad de los datos del 99.99999999999%. Entre los casos de uso se encuentran sitios web estáticos, aplicaciones móviles, procesos de copia de seguridad y restauración, entre otros.

Sin embargo, es necesario conocer que:

  • No soporta la ejecución de un sistema operativo
  • Los nombres de los buckets son globales
  • Si bien el almacenamiento que ofrece es ilimitado no lo es el tamaño de cada objeto, teniendo una limitante de máximo 5 TB por objeto
  • Los buckets se pueden versionar, pudiendo acceder a versiones anteriores de un mismo objeto.
  • Los bucket pueden tener una encriptación con KMS

Además, S3 se sustenta bajo un Modelo de Consistencia, con dos casos:

  • “read-after-write consistency”: Que asegura la accesibilidad (lectura) inmediata a un determinado objeto, una vez esté cargado en S3.
  • “eventual consistency”: Cuando se acceda a un objeto que haya sido previamente sobrescrito, reemplazado o eliminado se puede acceder al objeto previo al cambio. Es decir, existe un desfase.

También, es importante conocer el ciclo de vida de los objetos que viene dado por la frecuencia de acceso al dato; datos fríos (escaso acceso) o datos calientes (acceso regular). Donde se presenta otra de las bondades de S3, la reglas de Ciclo de Vida:

Image for post
Image for post

permitiendo realizar Transacciones de Objetos bajo condiciones determinadas como por ejemplo un periodo de tiempo determinado para que cambie de Standard / Reduced Redundancy (datos calientes) a Standard_IA (datos fríos), o incluso podemos eliminar el objeto si así lo deseamos.

Finalmente, se presentan consejos para el uso eficiente de S3:

  • Habilitar el versionamiento
  • Crear accesos a bucket con IAM
  • Crear reglas de ciclo de vida de objetos
  • Usar el nombre de nuestra compañía dentro del nombre de los buckets

Laboratorio S3:

Para la aplicación de laboratorio de almacenamiento de datos se realizó lo siguiente:

1. Se creó un bucket desde la consola de Amazon y también un bucket desde la instancia AWS CLI.

2. Subimos un archivo csv desde la consola y creamos un archivo en la EC2 y la subimos con AWS CLI al bucket que se creó.

3. Entramos a AWS y creamos el bucket aws-s3-(iniciales de nuestros nombres)

4. Dentro del bucket creamos carpeta Data, donde se subieron los respectivos archivos proporcionados.

5. Versionamos el bucket

6. Se verifica el versionamiento cuando subimos la segunda foto de Messi teniendo dos versiones.

7. En la máquina virtual creamos otro bucket y comprobamos que hayamos creado el bucket.

8. Creamos el archivo desde la instancia y lo subimos al bucket

9. Verificamos desde la consola que se haya creado el archivo desde la máquina virtual.

10. Creamos una carpeta llamada Output dentro del bucket nuevo donde se subió un mensaje, esto para poder probar el siguiente paso.

11. Creamos una regla de ciclo de vida de los objetos.

12. Aplicamos esto a la carpeta que creamos en el paso 10.

Este último paso se lo crea para que el objeto sea eliminado al día siguiente. Sin embargo, nosotros configuramos esto para que el objeto se elimine dentro de tres días ya que esto sí se puede modificar en la consola de AWS.

Autores:

  • Santiago Camacho
  • Christian Gutiérrez
  • Bryan Landázuri

Revisa los siguientes post

Módulo 1: Data Analytics en AWS

Módulo 2: Ingesta de datos Kinesis Data Firehose

Módulo 3: Almacenamiento — Kinesis Data Stream

Conoce más: bootcampai.org/aws-big-data

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store