Cómo monitorizar precios de productos con python y no morir en el intento [pre-blackfriday] — Parte II
En esta segunda parte veremos cómo poner en producción nuestro código Python en Google Cloud Platform 🥑🥑
Con motivo del Black Friday, la semana pasada escribí un artículo en el que detallaba cómo programar un script en python que nos permitiera configurar alertas en los precios de ciertos productos en Media Markt.
👇👇👇 Para quien lo lo haya leído, os dejo el enlace aquí 👇👇👇
Al final de la página os dejaré el código que utilizaré durante este artículo.
1. ¿Cómo ponemos en producción un script de python?
Quizás una de las preguntas que más me inquietaba una vez terminé el máster era…
Perfecto, ahora que ya se programar algo en python, ¿cómo puedo poner en producción un script que yo he programado?
Básicamente tenemos 3 opciones, que las ordenaré de menor a mayor complejidad y que dependerán también del código que hayamos desarrollado:
- Tener un portátil o sobremesa en casa encendido las 24h del día los 365 días del año 👎👎👎
- Contratar un ordenador -instancia- en la nube (GCP, AWS, Azure, etc) 👍
- Hacer uso de Cloud Functions (GCP), AWS Lambda, Azure Functions, o similares 👍👍👍
Imaginemos que hemos programado un código en python que visita una web cada hora, hace algo con los datos y termina su ejecución.
¿Tiene sentido tener un ordenador 24h al día los 365 días del año para ejecutar un código durante solo 5 minutos cada hora?
Pues en principio la respuesta es NO
Vamos a descartar la opción de tener un ordenador físico en casa encendido toooodo el día (opción 1). Más allá del coste en equipamiento y en consumo eléctrico, las posibilidades de que falle el sistema son enormes. Además, deberíamos tener el sistema actualizado (antivirus, OS, etc) y mantener el hardware en perfectas condiciones (limpieza de ventiladores, cambio de pasta térmica, etc)
¿Cómo se soluciona esto? pues haciendo uso de la tecnología en la nube que nos ofrece Google, Amazon o Microsoft, entre otros.
1. ¿Qué es Google Cloud Platform (GCP)?
Ya os hablé un poco de Google Cloud Platform en otro artículo.
Básicamente, Google ofrece una serie de recursos físicos (ordenadores, máquinas virtuales, etc) y servicios ya “pre-configurados” desplegados por todo el mundo para que empresas y usuarios nos olvidemos del mantenimiento y seguridad de estos sistemas.
En el artículo de MySQL os detallo los pasos a seguir para registraros. Os podéis registrar a través de este enlace o directamente en la página web.
⚠️ATENCIÓN⚠️: Para poder hacer uso de la tecnología de GCP es necesario que os registréis, incluyendo una tarjeta de crédito (no os cobrará durante el periodo de prueba)
1.1. ¿Qué servicio vamos a utilizar nosotros para poner en producción nuestro código de python?
Las Google Cloud Functions
Hablando “claro” se trata de un sistema que te permite contratar un ordenador SOLO cuando se está EJECUTANDO TU SCRIPT
Si tenemos un script que funciona durante 5 minutos cada hora, en un día, el tiempo de “facturación total” en Cloud Functions (opción 3.) será de: 24h x 5min = 120 minutos
Por el contrario, si alquilamos un ordenador -instancia- en la nube (opción 2.) y lo tenemos 24h al día encendido, aunque solo hagamos uso de el durante 5 minutos cada hora, nos facturarán un total de: 24h x 60min = 1.440 minutos
Es más que evidente el ahorro y la eficiencia en recursos que podremos obtener con Cloud Functions
2. Cloud Functions y python: ¡poniendo en marcha nuestro sistema!
Antes de meternos con GCP vamos a ver los pasos que tendremos que seguir:
- Creación de la Cloud Function
- Creación de una “Service Account” (ya veremos para qué)
- Creación del “trigger” (Cloud Scheduler) que ejecutará la Cloud Function cada X tiempo (minutos, horas, días, etc)
¡Vamos con ello!
2.1. Creación de la Cloud Function
Una vez estéis registrados en GCP y hayáis creado vuestro proyecto, tendremos que crear la Cloud Function con el código de python que vimos el otro día.
Una vez accedáis a Cloud Functions deberemos crear una nueva función:
Dentro de “Create Function” encontraremos 2 pasos a configurar:
- Paso 1: opciones generales
En el paso 1 configuraremos, entre otras cosas, cómo se realiza el “trigger” de la función. En este caso vamos a utilizar un “trigger” HTTP.
Un “trigger” HTTP no es ni más ni menos que una URL. Cada vez que se acceda a esa URL se EJECUTARÁ nuestro script de python
⚠️ATENCIÓN⚠️: Guardar la URL que aparece debajo de Trigger type, será la que utilizaremos para configurar el Cloud Scheduler
Para evitar que cualquiera pueda ejecutar nuestra función, exigiremos que “Requiera autentificación”, aquí es donde entra la “Service Account”. Quedaros con la caja amarilla “Service account” porque la necesitaremos configurar más adelante.
- Paso 2: código a ejecutar
Deberemos seleccionar como Runtime: Python 3.8
En el archivo main.py eliminaremos el código “hello_world” y pegaremos el nuestro. Os lo dejo aquí y al final del artículo.
Por último, deberemos cambiar el nombre del “Entry point” al nombre de la función que hemos creado e incluiremos el NOMBRE de las librerías que tenemos que instalar en el fichero “requirements.txt”
Le daremos a DEPLOY y… si todo está correcto, ¡tendremos ya nuestra Cloud Function configurada!
Algunos errores al hacer deploy ocurren porque no están las librerías incluidas en el “requirements.txt” o porque se han incluido librerías que ya están instaladas y no es necesario incluirlas
2.2. Creación de la “Service Account”
Tal y como hemos visto, para evitar que nadie “externo” pueda hacer uso de la URL de la Función y que la ejecute, tenemos que crear una “Cuenta de servicio” que tenga acceso a la ejecución de la misma.
Para ello tendremos que acceder a la aplicación IAM&Admin y luego a Service Accounts
Configuramos la cuenta en las dos siguientes pantallas. Lo más importante, incluir los roles de Cloud Function Admin y Cloud Scheduler Admin.
2.3. Creación del Cloud Scheduler
Si recordamos los pasos que íbamos a seguir…
Ahora ya solo nos queda crear el “Cloud Scheduler” y añadir la cuenta de servicio a la “Cloud Function”.
Quizás lo más “complicado” de entender sea el campo Frequency. Se trata de un formato unix-cron para establecer la frecuencia de ejecución.
En esta web podéis ver cómo funciona 👇👇👇
Solo quedará que editéis la Cloud Function para añadir la cuenta de servicio y estará listo….
3. ¡Ahora probaremos cómo funciona nuestro sistema!
Podemos esperar a que se ejecute el trigger según la frecuencia que hayamos configurado. Sin embargo, también podemos ejecutarlo de forma “manual” para ver cómo funciona:
Y aquí el resultado de lo que obtenemos:
¡Y hasta aquí este artículo!
Independientemente del uso que se le de (black friday u otro script que programéis) la posibilidad de desplegar Cloud Functions en Google es muy útil
Así mismo Google permite utilizar ciertos servicios de manera gratuita siempre y cuando se ajusten a los límites de uso que indican. Se pueden revisar en la página de precios de servicios de Google Cloud Platform.
¡Un saludo!
⚠️ATENCIÓN⚠️: Recordar que si utilizáis este código tenéis que incluir vuestro correo de Gmail, etc. Ver la parte I