Laboratorio AWS: Módulo 8

Laboratorio Kinesis Data Analytics, Kinesis Data Streams, Lambda y SNS

Bootcamp AI
10 min readJul 24, 2020

Actividad: Ingestar datos a Kinesis Data Streams y analizar con Kinesis Data Analytics en tiempo real.

1. Se ingresa a Google Colab para crear un nuevo notebook en donde se añade el contenido del archivo WriteKinesisStreams01.py, editamos la línea 15 por las credenciales de nuestro usuario, access key y secret access key.

2. Instalamos los siguientes paquetes en el mismo Google Colab, ya que los usaremos: !pip3 install boto3; !pip3 install pytz, finalmente marcamos permitir y crear

3. Se ingresa a la consola de AWS, para ir al servicio de Kinesis Data Streams, Se crea el stream con el nombre de stream01, en el campo Number of shards ingresamos

4. Crearemos un segundo Kinesis Data Streams que recibirá los datos que filtre Kinesis Data Analytics. El nombre sería stream02 con un solo shard.

5. Se crea la función Lambda, con el nombre AnalyticsAlarms, se selecciona el lenguaje de programación python3.7 y finalmente damos clic en crear función, al crearlo por primera vez se asocia un rol por defecto, se debe personalizar los permisos para evitar problemas.

6. Se modifica las políticas del rol asociado a la función Lambda, se ingresa en la pestaña JSON y se pega el contenido del archivo policy.json, para actualizar la política, la cual se puede personalizar en la opción políticas, donde se puede seleccionar los diferentes accesos para al último obtener mi archivo JSON.

7. Creamos un tópico en SNS, con el nombre de AnalyiticsAlarms, clic en Crear un tema y copiamos el ARN en un notepad ya que se lo usará más adelante. Agregamos una suscripción al tema creado, clic en Crear una suscripción, luego se selecciona en protocolo: Correo electrónico y en Puerta de enlace se coloca el correo personal, finalmente se da clic en crear una suscripción. Se recibirá un correo, para confirmar la suscripción al tema para que lleguen los mensajes.

8. Regresamos a la función Lambda y en la parte de código de la función, pegamos el contenido del archivo lambda.py, modificamos la línea 6, y agregamos el ARN de nuestro tema en SNS, clic en Guardar.

9. Crear una aplicación en Kinesis Data Analytics. En el nombre de la aplicación se coloca: analytics-pedidos-alert-increment, se selecciona el Runtime con SQL para consultar los datos, damos clic en Create application. Damos clic en Connect streaming data, esto permite buscar una Kinesis Data Streams o Kinesis Data Firehose que esté creado para poder realizar consultas SQL. Elegimos Kinesis Data Stream, seleecionamos el stream: stream01, donde se va a mandar los mensajes y por ultimo le damos clic en Discover
schema, para obtener todos los valores en tiempo real del stream01, y va a salir un error debido a que en el Kinesis Data Stream, no se ha agregado nada en los últimos segundos. Para enviar datos al Kinesis Data Stream, regresamos a Google Colab y ejecutaremos el notebook.

10. Volvemos a Kinesis Data Analytics y damos clic en Retry schema discovery, obteniendo las columnas llamadas registro, item y fecha, se da clic en Save y Continue. Se selecciona Go to SQL editor. Inicamos la aplicación dando clic en start application, donde aparacera un editor de consultas, dentro de esta ventana pegamos el contenido del achivo analytics-query.txt lo guardamos y arrancamos el SQL, ejecutamos algunas veces el Google Colab para poder visualizar los datos en tiempo real.

11. Para enviar los datos al stream02, damos clic en Destination y clic en Connect to a destination. Elegimos Kinesis Data Stream y seleccionamos el stream02, en la opción del stream de aplicación elegimos ALARM_STREAM, y finalmente clic en Save and continue. Verificamos las configuraciones de la aplicación, revisamos el Input y Output.

12. Por último agregamos el Kinesis Data Streams: stream02 a la función Lambda, damos clic en Añadir desencadenador, es el que va activar a la función lambda, seguido de un clic en el servicio de Kinesis, seleccionamos el stream02, ya que es el que está recibiendo todos los datos que se van filtrando, en intervalo de lote se coloca 0 que es el tiempo en el que lee los datos, clic en Agregar y actualizar. Ahora ejecutemos el Python (en el while lo cambiamos a 50 en vez de 500 para no recibir muchos correos) en el Google Colab y deberíamos recibir un correo, confirmando que se ejecutó la función lambda recibiendo un registro en el kinesis. Siendo útil para controlar algún incremento de pedidos en tiempo real.

13. Al terminar el taller, se elimina los dos Kinesis Data Streams y el recurso creado en Kinesis Data Analytics, para no incurrir en gastos.

RedShift:

Amazon Redshift es un servicio para realizar una migración rápida, puede almacenar y analizar datos de forma rápida y completamente administrada, consultas analíticas, mediante el uso de SQL estándar y las herramientas de inteligencia empresarial existentes de forma sencilla y rentable. Posee almacenamiento columnar, haciendo una búsqueda columna por columna, diseñado para OLAP, no OLTP, con interfaces SQL, ODBC, JDBC y monitoreo por CloudWatch.

Casos de uso

• Acelere las cargas de trabajo de análisis
• Almacén de datos unificado y lago de datos
• Modernización del almacén de datos.
• Analizar datos de ventas globales.
• Almacenar datos históricos de comercio de acciones
• Analizar impresiones de anuncios y clics
• Datos de juego agregados
• Analizar las tendencias sociales.
• Generalmente usado para hacer consultas analíticas para poder descubrir patrones.

Arquitectura

Se compone por un nodo líder y nodos de computo, generalmente el nodo líder es el encargado de almacenar la metadata (en este nodo no se guardan datos, pero si se los puede almacenar), las tablas con registros van a estar en los nodos de computo los cuales tienen un disco duro, al momento de hacer la ingesta de datos entre tablas pasa por el nodo líder, el cual es el encargado de enviar una tarea a los nodos de computo pidiendo una distribución de registros entre las tablas de cada nodo de computo dependiendo el tipo de distribución.

Distribuciones

Las distribuciones de cómo se van a almacenar las tablas en los nodos de computo son:

AUTO

Redshift calcula en función del tamaño de los datos el tipo de distribución óptima.

EVEN

Almacena los registros repartiéndolos alternamente en dos nodos de computo equitativamente con un algoritmo de round-robin, al realizar una consulta desde el nodo líder este va a recuperar los datos del nodo de computo 1 y 2.

KEY

Separa una tabla de registros, agrupando los registros basado en alguna columna, separando los datos en diferentes nodos de computo, con esta distribución es más rápido encontrar los datos desde el nodo líder.

ALL

En esta distribución el nodo líder lleva todos los registros al nodo de computo 1 y 2, siendo esto más costoso en almacenamiento, pero garantiza una alta disponibilidad.

Comandos: Importando/Exportando datos

Comando Copy

Al ejecutar el comando se puede leer el archivo en S3 e insertarlo en la tabla en Redshift, se puede ingestar datos desde una tabla en DynamoDB o desde EMR, el comando requiere personalizar algunos roles para que el comando tenga acceso a S3.

Comando Unload

Al ejecutar Unload se exporta la información desde una tabla Redshift con algún filtro especifico a un archivo con un formato a S3

Laboratorio Redshift:

Actividad: Ingestar datos a RedShift desde S3, y exportar resultados de consultas en RedShift hacia S3.

1. Se entra a la consola de AWS para acceder al servicio de S3 y crear un nuevo bucket. Con el siguiente nombre: aws-redshift-lmgs (las últimas 4 letras pueden ser las iniciales de su nombre)

2. Se crean las siguientes carpetas: “Carpeta data” y dentro de la carpeta data dos subcarpetas: “input” y “output”. En la carpeta input, subimos el archivo data.csv.gz, este archivo es el comprimido.

3. Entramos al servicio de RedShift y creamos un nuevo clúster. Seleccionamos las siguientes opciones para la creación del clúster: en el nombre del cluster se deja el que es por defecto, se selecciona la opción con menor costo DC2.large, se crea un solo nodo. En la parte de Data configuration se deja el nombre “dev”, el puerto para conectar por algún ID por defecto y en la contraseña se escoge una compleja y por último se selecciona create cluster.

4. Se crea un nuevo rol para que el clúster RedShift pueda tener control total a S3. Nos dirigimos al servicio de IAM opción Roles, se selecciona el caso de uso Redshift Customizable. En el campo de Filtrar políticas, escribimos S3, y seleccionamos la política AmazonS3FullAccess.

5. No agregamos etiquetas, damos clic en Siguiente, en Revisar colocamos el nombre del rol: roleRedshiftS3 y clic en Crear un rol.

6. Volvemos a RedShift y actualizamos la lista de roles, aparecerá el rol que hemos creado, clic en Add IAM Role y clic en Done.

Clic en Cluster -> Nombre del clúster -> Pestaña Propierties -> Attach IAM Roles.

7. Después de unos pocos minutos, el clúster está listo para ser usado. Clic al nombre del clúster. En esta ventana, le damos clic a Query cluster (analizador de consultas). Nos aparece el analizador de consultas de RedShift, se coloca el usuario aws-user y la clave creada anteriormente.

8. Crearemos una tabla en RedShift con el siguiente código:

create table movies(

title varchar(300) not null,

year integer not null,

rating real not null,

running_time_secs integer not null

Actividad: Ingestar datos a RedShift desde S3, y exportar resultados de consultas en RedShift hacia S3.

1. Se entra a la consola de AWS para acceder al servicio de S3 y crear un nuevo bucket. Con el siguiente nombre: aws-redshift-lmgs (las últimas 4 letras pueden ser las iniciales de su nombre)

2. Se crean las siguientes carpetas: “Carpeta data” y dentro de la carpeta data dos subcarpetas: “input” y “output”. En la carpeta input, subimos el archivo data.csv.gz, este archivo es el comprimido.

3. Entramos al servicio de RedShift y creamos un nuevo clúster. Seleccionamos las siguientes opciones para la creación del clúster: en el nombre del cluster se deja el que es por defecto, se selecciona la opción con menor costo DC2.large, se crea un solo nodo. En la parte de Data configuration se deja el nombre “dev”, el puerto para conectar por algún ID por defecto y en la contraseña se escoge una compleja y por último se selecciona create cluster.

4. Se crea un nuevo rol para que el clúster RedShift pueda tener control total a S3. Nos dirigimos al servicio de IAM opción Roles, se selecciona el caso de uso Redshift Customizable. En el campo de Filtrar políticas, escribimos S3, y seleccionamos la política AmazonS3FullAccess.

5. No agregamos etiquetas, damos clic en Siguiente, en Revisar colocamos el nombre del rol: roleRedshiftS3 y clic en Crear un rol.

6. Volvemos a RedShift y actualizamos la lista de roles, aparecerá el rol que hemos creado, clic en Add IAM Role y clic en Done.

Clic en Cluster -> Nombre del clúster -> Pestaña Propierties -> Attach IAM Roles.

7. Después de unos pocos minutos, el clúster está listo para ser usado. Clic al nombre del clúster. En esta ventana, le damos clic a Query cluster (analizador de consultas). Nos aparece el analizador de consultas de RedShift, se coloca el usuario aws-user y la clave creada anteriormente.

8. Crearemos una tabla en RedShift con el siguiente código:

create table movies(

title varchar(300) not null,

year integer not null,

rating real not null,

running_time_secs integer not null

9. Comprobamos la tabla creada en el esquema public con sus cuatro campos definidos. Revisamos que la tabla está vacía. Para poder insertar datos en la tabla movies a partir del archivo data.csv.gz alojado en S3. Ingestamoa datos a la tabla movies con la información que contiene el archivo data.csv.gz. Se selecciona el boton Copy Amazon Resource Name (ARN) y se lo pega en el codigo iam role:

copy movies from ‘s3://aws-redshift-lmgs/data/input/data.csv.gz’

iam_role ‘arn:aws:iam::599588339263:role/roleRedShiftS3’

CSV

GZIP

IGNOREHEADER 1;

10. Se selecciona ejecutar. Para luego validar que se haya ingestado datos, realizamos la siguiente consulta:

select * from movies

11. Si deseamos exportar el resultado de un query hacia S3, ejecutamos el siguiente script, tomar en cuenta que solo se puede ejecutar un script a la vez.

UNLOAD (‘

SELECT title, rating FROM movies

WHERE year = 2013 and rating > 8.0

ORDER BY rating DESC;’

) TO ‘s3://aws-redshift-lmgs/data/output/’

iam_role ‘arn:aws:iam::599588339263:role/roleRedShiftS3’

CSV;

Modificar el script con el bucket que crearon y el arn del rol, luego se selecciona ejecutar. Nos vamos al bucket que hemos creado, y dentro de la carpeta output tendremos 2 archivos, solamente el primero contendrá el resultado del query, los registros también se los puede visualizar desde el bucket sin necesidad de descargarlo.

12. Una vez terminado el laboratorio, eliminar el clúster de RedShift para que no nos cobren.

Autores:

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

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

--

--

No responses yet