Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Ejecutar Scripts en la Nube

🧭 Navegación:

🌩️ La nube: Tu almacén virtual

Imagina que tu computadora es como tu almacén principal, donde desarrollas y pruebas tus productos (scripts). Pero ahora necesitas un “almacén satélite” que funcione de forma autónoma, incluso cuando cierras tu almacén principal por la noche.

La nube es ese almacén satélite: un espacio virtual donde tus scripts pueden vivir y ejecutarse independientemente de tu computadora personal.

🤔 ¿Por qué ejecutar scripts en la nube?

Hay muchas razones para mover tus scripts a la nube:

  • Disponibilidad 24/7: Tus scripts funcionan incluso cuando tu computadora está apagada
  • Recursos dedicados: No consumen recursos de tu máquina personal
  • Conectividad constante: Mejor acceso a internet y menos interrupciones
  • Escalabilidad: Puedes aumentar recursos según tus necesidades
  • Acceso remoto: Puedes monitorear y actualizar desde cualquier lugar

🛠️ Opciones para desplegar en la nube

Existen varias opciones para ejecutar scripts en la nube, con diferentes niveles de complejidad y costo:

1. Servidores Virtuales Privados (VPS)

Un VPS es como alquilar un pequeño servidor en la nube. Es la opción más flexible y te da control total.

Proveedores populares:

  • DigitalOcean: Droplets desde $5/mes
  • Linode: Servidores desde $5/mes
  • AWS EC2: Instancias con capa gratuita disponible
  • Google Cloud Compute Engine: Instancias con crédito gratuito inicial
  • Microsoft Azure: Máquinas virtuales con crédito gratuito inicial

Ventajas:

  • Control total sobre el servidor
  • Puedes instalar cualquier software
  • Buena relación costo-beneficio para scripts que se ejecutan constantemente

Desventajas:

  • Requiere conocimientos básicos de administración de servidores
  • Tú eres responsable de la seguridad y mantenimiento

2. Plataformas como Servicio (PaaS)

Las PaaS son plataformas que manejan la infraestructura por ti, permitiéndote enfocarte solo en tu código.

Opciones populares:

  • PythonAnywhere: Específico para Python, con plan gratuito disponible
  • Heroku: Plataforma general, con plan gratuito limitado
  • Google App Engine: Servicio de Google Cloud con capa gratuita

Ventajas:

  • Más fácil de usar, menos configuración
  • No requiere conocimientos de administración de servidores
  • Muchas ofrecen planes gratuitos para proyectos pequeños

Desventajas:

  • Menos flexibilidad que un VPS
  • Pueden ser más costosas para uso intensivo
  • Algunas tienen limitaciones en ejecuciones en segundo plano

3. Servicios Serverless

Los servicios serverless ejecutan tu código solo cuando es necesario, sin mantener un servidor activo constantemente.

Opciones populares:

  • AWS Lambda: Funciones con capa gratuita generosa
  • Google Cloud Functions: Funciones con capa gratuita
  • Azure Functions: Funciones con capa gratuita

Ventajas:

  • Pagas solo por el tiempo de ejecución real
  • Escalado automático
  • Sin mantenimiento de servidor

Desventajas:

  • Limitaciones de tiempo de ejecución (generalmente máximo 15 minutos)
  • No ideal para scripts que necesitan ejecutarse constantemente
  • Curva de aprendizaje para configuración inicial

🚀 Tutorial: Desplegando un script en un VPS

Para este tutorial, usaremos un VPS como ejemplo, ya que ofrece el mejor balance entre flexibilidad, costo y facilidad de uso para scripts de automatización.

Paso 1: Preparar tu script para el despliegue

Antes de desplegar tu script, necesitas asegurarte de que esté listo para funcionar en un entorno de servidor:

  1. Usa rutas absolutas o relativas al directorio del script:
# En lugar de esto:
with open("datos.txt", "r") as f:
    # código...

# Usa esto:
import os

# Obtener el directorio donde está el script
script_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_dir, "datos.txt")

with open(file_path, "r") as f:
    # código...
  1. Maneja las dependencias adecuadamente:

Crea un archivo requirements.txt que liste todas las bibliotecas que tu script necesita:

requests 2.28.1
beautifulsoup4 4.11.1
pandas 1.5.0
  1. Añade logging para depuración remota:
import logging

# Configurar logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler("script_log.txt"),
        logging.StreamHandler()
    ]
)

# Usar logging en lugar de print
logging.info("Script iniciado")
try:
    # Tu código aquí
    logging.info("Operación completada")
except Exception as e:
    logging.error(f"Error: {str(e)}")
  1. Asegúrate de que tu script sea independiente:

Evita dependencias de interfaces gráficas o recursos que solo existen en tu computadora local.

Paso 2: Obtener un servidor virtual (VPS)

Para este ejemplo, usaremos DigitalOcean, pero los pasos son similares en otros proveedores:

  1. Crea una cuenta en DigitalOcean (u otro proveedor de VPS)
  2. Crea un Droplet (servidor virtual):
    • Selecciona Ubuntu como sistema operativo
    • Elige el plan más básico ($5/mes es suficiente para empezar)
    • Selecciona una región cercana a ti
    • Añade tu clave SSH o configura una contraseña
    • Crea el Droplet

Paso 3: Conectarte a tu servidor

Una vez que tu servidor esté listo, necesitas conectarte a él:

En Linux/macOS:

Abre una terminal y usa SSH:

ssh root@tu_ip_del_servidor

En Windows:

Usa PuTTY o el cliente SSH integrado en Windows 10/11:

ssh root@tu_ip_del_servidor

Paso 4: Configurar el entorno en el servidor

Una vez conectado, configura el entorno para ejecutar tu script:

  1. Actualiza el sistema:
apt update && apt upgrade -y
  1. Instala Python y herramientas necesarias:
apt install python3 python3-pip python3-venv -y
  1. Crea un directorio para tu proyecto:
mkdir -p /opt/myscripts
cd /opt/myscripts

Paso 5: Transferir tu script al servidor

Hay varias formas de transferir archivos a tu servidor:

Usando SCP (desde tu computadora local):

# En Linux/macOS/Windows con OpenSSH
scp tu_script.py requirements.txt root@tu_ip_del_servidor:/opt/myscripts/

Usando SFTP:

sftp root@tu_ip_del_servidor
cd /opt/myscripts
put tu_script.py
put requirements.txt
exit

Usando un editor en el servidor:

# En el servidor
nano /opt/myscripts/tu_script.py
# Pega tu código, guarda con Ctrl+O, sal con Ctrl+X

Paso 6: Configurar un entorno virtual

Es una buena práctica usar entornos virtuales para aislar las dependencias:

cd /opt/myscripts
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Paso 7: Ejecutar tu script manualmente

Primero, verifica que tu script funcione correctamente:

python tu_script.py

Si todo funciona bien, verás la salida esperada o los logs indicando que el script se ejecutó correctamente.

Paso 8: Configurar la ejecución automática

Para que tu script se ejecute automáticamente, puedes usar cron (lo veremos en detalle en la siguiente sección):

crontab -e

Añade una línea para ejecutar tu script periódicamente:

# Ejecutar el script todos los días a las 3 AM
0 3 * * * cd /opt/myscripts && source venv/bin/activate && python tu_script.py

🔒 Consideraciones de seguridad

Al desplegar scripts en la nube, la seguridad es crucial:

  1. Actualiza regularmente tu servidor con parches de seguridad
  2. Usa un usuario no-root para ejecutar tus scripts
  3. Configura un firewall para limitar el acceso
  4. No almacenes credenciales directamente en tu código
  5. Usa variables de entorno o archivos de configuración seguros
  6. Habilita autenticación de dos factores para acceder a tu servidor

💰 Optimización de costos

Para mantener los costos bajo control:

  1. Comienza pequeño: Usa el plan más básico y escala según sea necesario
  2. Monitorea el uso: Verifica si estás pagando por recursos que no utilizas
  3. Considera opciones serverless para scripts que se ejecutan con poca frecuencia
  4. Aprovecha las capas gratuitas que ofrecen muchos proveedores
  5. Comparte recursos: Ejecuta múltiples scripts en el mismo servidor

🔍 Comprueba tu comprensión

  1. ¿Cuál es la principal ventaja de ejecutar scripts en la nube en lugar de en tu computadora local?
  2. ¿Por qué es importante usar rutas absolutas en scripts que se ejecutarán en servidores?
  3. ¿Cuál es la diferencia principal entre un VPS y un servicio serverless?
  4. ¿Por qué es recomendable usar entornos virtuales en el servidor?
  5. ¿Qué información NO deberías incluir directamente en el código de tu script?

🛠️ Ejercicio práctico

Toma uno de los scripts de automatización que creamos en el capítulo anterior (por ejemplo, el organizador de archivos) y prepáralo para despliegue siguiendo estos pasos:

  1. Modifica el script para usar rutas absolutas
  2. Añade logging adecuado
  3. Crea un archivo requirements.txt
  4. Documenta los pasos necesarios para desplegarlo

Si tienes acceso a un VPS o una cuenta gratuita en algún proveedor de nube, intenta desplegar el script siguiendo los pasos de este tutorial.

En la siguiente sección, aprenderemos a programar tareas automáticas para que nuestros scripts se ejecuten periódicamente sin intervención manual.