Google Cloud Run toma una imagen de contenedor y la ejecuta sin que tengas que tocar un solo servidor. Escala a cero cuando está inactivo y escala automáticamente bajo carga. Si tu carga de trabajo es stateless y está en contenedores, Cloud Run merece una evaluación seria.
¿Qué es Google Cloud Run?
Google Cloud Run es una plataforma de cómputo totalmente gestionada, construida sobre Knative. Le proporcionas un contenedor, configuras algunos parámetros y se encarga de todo lo demás: aprovisionamiento, escalado, balanceo de carga y terminación TLS. Cobra por cada 100ms de tiempo real de procesamiento de solicitudes, por lo que los servicios inactivos no tienen ningún costo.
¿Por qué elegir Google Cloud Run?
- Sin infraestructura que gestionar. Escribes código y construyes contenedores; Cloud Run se encarga del resto.
- Escala automáticamente de cero a miles de instancias concurrentes según el tráfico.
- Paga solo por los recursos consumidos durante el procesamiento activo de solicitudes.
- Acepta cualquier lenguaje o binario que se ejecute dentro de un contenedor.
Primeros Pasos con Google Cloud Run
Requisitos Previos
- Una cuenta de Google Cloud con facturación habilitada.
- Docker instalado localmente.
- El CLI
gcloudinstalado y autenticado.
Paso 1: Escribe tu Aplicación
Comienza escribiendo una aplicación sencilla. Con fines demostrativos, usaremos una app básica en Node.js:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Google Cloud Run!');
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`App listening on port ${port}`);
});
Paso 2: Conteneriza tu Aplicación
Crea un Dockerfile para tu aplicación:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
ENV PORT 8080
EXPOSE 8080
CMD [ "node", "index.js" ]
Paso 3: Construye y Prueba tu Contenedor Localmente
Construye tu imagen Docker:
docker build -t gcr.io/your-project-id/your-app .
Ejecuta tu contenedor localmente para probarlo:
docker run -p 8080:8080 gcr.io/your-project-id/your-app
Visita http://localhost:8080 para verificar que funciona correctamente.
Paso 4: Despliega en Google Cloud Run
Autentícate en Google Cloud:
gcloud auth login
Establece el ID de tu proyecto:
gcloud config set project your-project-id
Sube tu imagen Docker a Google Container Registry:
docker push gcr.io/your-project-id/your-app
Despliega tu contenedor en Cloud Run:
gcloud run deploy your-app \
--image gcr.io/your-project-id/your-app \
--platform managed \
--region us-central1 \
--allow-unauthenticated
Paso 5: Prueba tu Aplicación Desplegada
Tras el despliegue, Google Cloud Run proporcionará una URL para tu servicio. Visita la URL para ver tu aplicación en producción.
Consejos para Optimizar tu Servicio en Cloud Run
- Usa imágenes base mínimas. Las imágenes más pequeñas arrancan más rápido y reducen tu superficie de ataque.
- Ajusta la configuración de concurrencia. Por defecto, cada instancia gestiona 80 solicitudes concurrentes, pero las cargas de trabajo vinculadas a la CPU deberían usar un valor menor.
- Define límites explícitos de CPU y memoria para evitar picos de facturación inesperados.
Integración con Otros Servicios de Google Cloud
Cloud Run se conecta limpiamente con el resto de GCP:
- Cloud SQL para bases de datos relacionales gestionadas, usando el sidecar Cloud SQL Auth Proxy.
- Cloud Pub/Sub para invocación orientada a eventos: Pub/Sub envía mensajes a tu endpoint de Cloud Run.
- Cloud Storage para almacenamiento de objetos, accedido a través de la biblioteca cliente estándar.
Conclusión
Cloud Run elimina la mayor parte de la sobrecarga operativa asociada con la ejecución de servicios en contenedores. La principal restricción es la statelessness: las instancias pueden crearse o destruirse en cualquier momento, por lo que cualquier estado debe residir fuera del contenedor, en una base de datos o caché. Dentro de esa restricción, es un destino de despliegue práctico y rentable.
Lecturas Adicionales
Samuel Fajreldines es especialista en los ecosistemas JavaScript y TypeScript, experto en DevOps y Arquitectura Serverless, y competente en frameworks PHP.