tutoriales.com

Despliegue de Aplicaciones Serverless con Cloud Run en Google Cloud

Este tutorial te guiará paso a paso en el despliegue de aplicaciones serverless utilizando Cloud Run en Google Cloud. Descubre cómo llevar tus contenedores a la nube, configurar servicios gestionados y aprovechar la escalabilidad automática para tus proyectos.

Intermedio18 min de lectura48 views16 de marzo de 2026Reportar error

Google Cloud Run es una plataforma de computación serverless que te permite ejecutar contenedores sin preocuparte por la infraestructura subyacente. Es una excelente opción para desplegar microservicios, APIs, aplicaciones web y trabajos por lotes que necesitan escalar rápidamente y pagar solo por lo que usas.

En este tutorial, exploraremos los conceptos clave de Cloud Run y te guiaremos a través del proceso de despliegue de una aplicación de ejemplo.


🚀 ¿Qué es Google Cloud Run?

Cloud Run es un servicio totalmente gestionado que te permite ejecutar contenedores Docker sin servidor en Google Cloud. Significa que Google se encarga de todo el aprovisionamiento, escalado, patching y gestión del servidor, permitiéndote centrarte únicamente en tu código.

💡 Ventajas Clave de Cloud Run

  • Serverless: No gestionas servidores. Google se encarga de la infraestructura.
  • Contenedores: Despliega cualquier aplicación empaquetada como un contenedor Docker, sin restricciones de lenguaje o librería.
  • Pago por uso: Solo pagas cuando tu código está ejecutándose, hasta el nivel de milisegundos de uso de CPU y memoria.
  • Escalado automático: Escala de cero a miles de instancias y viceversa automáticamente en función de la demanda.
  • Integración: Se integra perfectamente con otros servicios de Google Cloud como Cloud Build, Cloud SQL, VPCs, entre otros.
  • Dominio personalizado: Facilidad para mapear dominios personalizados a tus servicios de Cloud Run.
💡 Consejo: Cloud Run es ideal para aplicaciones que tienen patrones de tráfico irregulares o que necesitan escalar rápidamente, como APIs RESTful, webhooks, microservicios y backends móviles.

🛠️ Herramientas Necesarias

Antes de empezar, asegúrate de tener lo siguiente:

  1. Una cuenta de Google Cloud: Si no tienes una, puedes registrarte para una prueba gratuita que incluye créditos generosos.
  2. Google Cloud SDK (gcloud CLI): Instalado y configurado en tu máquina local. Esto te permitirá interactuar con Google Cloud desde la línea de comandos.
    • Puedes verificar la instalación con: gcloud --version
    • Si no lo tienes, sigue las instrucciones de instalación en la documentación oficial de Google Cloud.
  3. Docker: Instalado en tu máquina local. Lo usaremos para construir la imagen de nuestro contenedor.
    • Puedes verificar la instalación con: docker --version
📌 Nota: Este tutorial asume que tienes un proyecto de Google Cloud existente y que el gcloud CLI está autenticado y configurado para ese proyecto.

🚀 Paso 1: Configurar el Proyecto de Google Cloud

Primero, asegúrate de que los servicios necesarios estén habilitados en tu proyecto.

1.1 Habilitar APIs

Necesitamos habilitar las APIs de Cloud Run y Artifact Registry (o Container Registry si lo prefieres).

gcloud services enable run.googleapis.com
gcloud services enable artifactregistry.googleapis.com
🔥 Importante: Artifact Registry es el servicio recomendado por Google para almacenar imágenes de contenedores en la actualidad, superando a Container Registry. Asegúrate de usarlo para nuevos proyectos.

1.2 Crear un Repositorio de Artifact Registry

Vamos a crear un repositorio en Artifact Registry para almacenar nuestra imagen Docker. Elige una región que esté cerca de tus usuarios o de otros servicios de GCP que utilices.

gcloud artifacts repositories create my-cloudrun-repo \
    --repository-format=docker \
    --location=us-central1 \
    --description="Docker repository for Cloud Run images"

Reemplaza my-cloudrun-repo con un nombre único para tu repositorio y us-central1 con tu región preferida.


💻 Paso 2: Crear una Aplicación de Ejemplo

Para este tutorial, utilizaremos una aplicación web simple escrita en Python con Flask. Esta aplicación responderá con un mensaje de bienvenida.

2.1 Estructura del Proyecto

Crea una carpeta para tu proyecto y dentro de ella, los siguientes archivos:

my-cloudrun-app/
├── app.py
├── requirements.txt
└── Dockerfile

2.2 app.py

Este archivo contendrá el código de nuestra aplicación Flask.

from flask import Flask
import os

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello from Cloud Run! Greetings from GPT-4o!\n'

if __name__ == '__main__':
    # Obtener el puerto de la variable de entorno PORT, si no existe, usar 8080
    port = int(os.environ.get('PORT', 8080))
    app.run(debug=True, host='0.0.0.0', port=port)
💡 Consejo: Es crucial que tu aplicación escuche en el puerto especificado por la variable de entorno `PORT`. Cloud Run inyecta esta variable, y si tu aplicación no la usa, no podrá recibir tráfico.

2.3 requirements.txt

Este archivo listará las dependencias de Python.

Flask==2.3.3

2.4 Dockerfile

Este archivo define cómo se construirá nuestra imagen Docker.

# Usa una imagen base de Python ligera
FROM python:3.9-slim-buster

# Establece el directorio de trabajo dentro del contenedor
WORKDIR /app

# Copia los archivos de requerimientos e instala las dependencias
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copia el código de tu aplicación
COPY .

# Expone el puerto que usará la aplicación (Cloud Run lo manejará)
EXPOSE 8080

# Comando para ejecutar la aplicación cuando el contenedor se inicie
# Usamos gunicorn para producción, pero para este ejemplo simple, python app.py es suficiente
# CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:$PORT"]
CMD ["python", "app.py"]
⚠️ Advertencia: Para aplicaciones de producción, es altamente recomendable usar un servidor WSGI como Gunicorn o uWSGI con Flask, en lugar de `python app.py` directamente. Esto ofrece mejor rendimiento y estabilidad.

📦 Paso 3: Construir y Empujar la Imagen Docker

Ahora que tenemos nuestra aplicación y Dockerfile, construiremos la imagen Docker y la subiremos a Artifact Registry.

3.1 Construir la Imagen

Navega a la carpeta my-cloudrun-app en tu terminal y ejecuta el siguiente comando. Reemplaza my-cloudrun-repo y us-central1 con tus valores.

docker build -t us-central1-docker.pkg.dev/YOUR_PROJECT_ID/my-cloudrun-repo/my-cloudrun-app:1.0 .

Asegúrate de reemplazar YOUR_PROJECT_ID con el ID de tu proyecto de Google Cloud.

📌 Nota: El nombre de la imagen sigue el formato `LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:TAG`.

3.2 Autenticar Docker con Artifact Registry

Para empujar la imagen, Docker necesita autenticarse con Artifact Registry. Ejecuta:

gcloud auth configure-docker us-central1-docker.pkg.dev

Reemplaza us-central1 con la región de tu repositorio.

3.3 Empujar la Imagen a Artifact Registry

docker push us-central1-docker.pkg.dev/YOUR_PROJECT_ID/my-cloudrun-repo/my-cloudrun-app:1.0

Verifica que la imagen se haya subido correctamente visitando la sección de Artifact Registry en la consola de Google Cloud, o listando las imágenes con gcloud artifacts docker images list.<


🚀 Paso 4: Desplegar la Aplicación en Cloud Run

Con la imagen del contenedor en Artifact Registry, estamos listos para desplegarla en Cloud Run.

4.1 Desplegar el Servicio

gcloud run deploy my-cloudrun-service \
    --image us-central1-docker.pkg.dev/YOUR_PROJECT_ID/my-cloudrun-repo/my-cloudrun-app:1.0 \
    --platform managed \
    --region us-central1 \
    --allow-unauthenticated \
    --max-instances 10 \
    --cpu 1 \
    --memory 512Mi \
    --port 8080

Desglosemos los argumentos:

  • my-cloudrun-service: Nombre que le das a tu servicio Cloud Run.
  • --image: Ruta completa a tu imagen Docker en Artifact Registry.
  • --platform managed: Especifica que usaremos la versión gestionada de Cloud Run (la más común y fácil de usar).
  • --region: La región donde se desplegará tu servicio. Debe ser la misma que la de tu repositorio de Artifact Registry o cercana.
  • --allow-unauthenticated: Permite que el servicio sea invocado sin credenciales de autenticación. Ideal para aplicaciones web públicas o APIs.
  • --max-instances: El número máximo de instancias que Cloud Run puede escalar para tu servicio. Ajusta según tus necesidades.
  • --cpu: La cantidad de vCPU asignada a cada instancia. Se recomienda un mínimo de 1 vCPU para la mayoría de las aplicaciones web.
  • --memory: La cantidad de memoria asignada a cada instancia. Ajusta según los requisitos de tu aplicación.
  • --port: El puerto en el que tu contenedor escucha el tráfico. Debe coincidir con el EXPOSE en tu Dockerfile y el puerto en el que tu aplicación Flask está escuchando.

Durante el despliegue, gcloud CLI te preguntará si quieres crear nuevos permisos o si estás de acuerdo con la configuración. Confirma para continuar.

4.2 Verificar el Despliegue

Una vez que el despliegue se complete, la terminal te mostrará la URL del servicio. Abre esta URL en tu navegador. Deberías ver el mensaje: Hello from Cloud Run! Greetings from GPT-4o!

También puedes obtener los detalles del servicio con:

gcloud run services describe my-cloudrun-service --platform managed --region us-central1

Esto te dará información detallada, incluyendo la URL, el estado del servicio y la configuración de escalado.

Despliegue Completo ✅

📊 Paso 5: Gestión y Escalabilidad de Cloud Run

Cloud Run ofrece potentes características para gestionar y escalar tus servicios.

5.1 Ajustar la Concurrencia

La concurrencia es el número máximo de solicitudes simultáneas que cada instancia de tu servicio puede manejar. El valor por defecto es 80.

Para ajustarlo, puedes usar el comando update:

gcloud run services update my-cloudrun-service \
    --platform managed \
    --region us-central1 \
    --concurrency 50
💡 Consejo: Un valor de concurrencia más alto puede reducir el número de instancias necesarias y, por lo tanto, los costos. Sin embargo, asegúrate de que tu aplicación pueda manejar ese nivel de concurrencia. Realiza pruebas de carga para encontrar el valor óptimo.

5.2 Establecer un Número Mínimo de Instancias

Por defecto, Cloud Run escala a cero instancias cuando no hay tráfico. Si necesitas una latencia de inicio baja constante o tienes requisitos específicos, puedes mantener un número mínimo de instancias siempre activas.

gcloud run services update my-cloudrun-service \
    --platform managed \
    --region us-central1 \
    --min-instances 1

Esto asegura que siempre haya al menos una instancia lista para responder a las solicitudes, aunque tendrá un costo asociado.

5.3 Mapeo de Dominio Personalizado

Para usar tu propio dominio (ej. api.misitio.com) con Cloud Run, sigue estos pasos:

  1. Añadir mapeo de dominio:
gcloud run domains add-mapping --service my-cloudrun-service --domain api.misitio.com --platform managed --region us-central1
  1. Actualizar registros DNS: Cloud Run te proporcionará registros CNAME o A/AAAA que deberás añadir a la configuración DNS de tu dominio.
🔥 Importante: La propagación de DNS puede tardar un tiempo (desde minutos hasta varias horas).

5.4 Variables de Entorno

Puedes inyectar variables de entorno en tus servicios de Cloud Run para configuraciones, claves API, etc.

gcloud run services update my-cloudrun-service \
    --platform managed \
    --region us-central1 \
    --set-env-vars ENV_VAR_NAME=value,ANOTHER_VAR=another_value

5.5 Integración con Cloud SQL

Si tu aplicación necesita una base de datos, Cloud Run se integra fácilmente con Cloud SQL. Simplemente autoriza tu servicio de Cloud Run para conectarse a tu instancia de Cloud SQL.

gcloud run services update my-cloudrun-service \
    --platform managed \
    --region us-central1 \
    --add-cloudsql-instances YOUR_CLOUD_SQL_CONNECTION_NAME

Donde YOUR_CLOUD_SQL_CONNECTION_NAME tiene el formato PROJECT_ID:REGION:INSTANCE_NAME.

Código de Aplicación Dockerfile Docker Build Artifact Registry Cloud Run Deploy URL Pública Flujo de Despliegue Cloud Run

🗑️ Limpieza de Recursos

Para evitar cargos inesperados, es una buena práctica eliminar los recursos que ya no necesitas.

  1. Eliminar el servicio de Cloud Run:
gcloud run services delete my-cloudrun-service --platform managed --region us-central1
  1. Eliminar la imagen de Artifact Registry:
gcloud artifacts docker images delete us-central1-docker.pkg.dev/YOUR_PROJECT_ID/my-cloudrun-repo/my-cloudrun-app:1.0 --delete-tags --delete-metadata
  1. Eliminar el repositorio de Artifact Registry (opcional):
gcloud artifacts repositories delete my-cloudrun-repo --location=us-central1
  1. Deshabilitar las APIs (opcional):
gcloud services disable run.googleapis.com
gcloud services disable artifactregistry.googleapis.com

❓ Preguntas Frecuentes (FAQ)

¿Cuál es la diferencia entre Cloud Run y App Engine? App Engine es una plataforma PaaS (Platform as a Service) más antigua y robusta, ideal para aplicaciones monolíticas o grandes. Cloud Run es un servicio más moderno y flexible, centrado en la ejecución de contenedores serverless, ideal para microservicios y funciones. Cloud Run ofrece un modelo de pago por uso más granular y mayor flexibilidad en el entorno de ejecución gracias a los contenedores.
¿Puedo ejecutar cualquier tipo de aplicación en Cloud Run? Sí, siempre y cuando puedas empaquetarla como un contenedor Docker y cumpla con el "contrato" de Cloud Run (escuchar en el puerto especificado por la variable `PORT`, responder a solicitudes HTTP, etc.). Esto incluye aplicaciones en cualquier lenguaje, frameworks, o incluso binarios personalizados.
¿Es Cloud Run adecuado para tareas de larga duración o intensivas en CPU? Cloud Run está diseñado para responder a solicitudes HTTP. Para tareas de larga duración o intensivas en CPU que no responden a una solicitud HTTP (por ejemplo, procesamiento de datos por lotes), servicios como Cloud Functions (para funciones cortas y eventos), Cloud Tasks (para colas de trabajo) o incluso un trabajo en Compute Engine/GKE serían más apropiados. Sin embargo, Cloud Run puede ser adecuado si la tarea puede ser contenida dentro del tiempo límite de una solicitud HTTP (máximo 60 minutos).
¿Cómo manejo secretos como claves de API en Cloud Run? La mejor práctica es usar Google Secret Manager para almacenar tus secretos y acceder a ellos desde tu aplicación de Cloud Run. Puedes inyectarlos como variables de entorno o leerlos directamente desde el código de tu aplicación con las librerías cliente de Secret Manager. Esto es mucho más seguro que codificar los secretos directamente en tu imagen Docker o en las variables de entorno de Cloud Run.

Conclusión ✨

Has completado este tutorial sobre cómo desplegar aplicaciones serverless con Cloud Run en Google Cloud. Has aprendido a construir una imagen Docker, subirla a Artifact Registry y desplegarla como un servicio escalable en Cloud Run. También has explorado opciones avanzadas de configuración y gestión.

Cloud Run es una herramienta poderosa para modernizar tus aplicaciones y reducir la carga operativa. Experimenta con diferentes configuraciones y explora sus integraciones con otros servicios de Google Cloud para llevar tus proyectos al siguiente nivel.

¡Felices despliegues!

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!