Introducción

Cloud Run es un servicio de Google Cloud Platform que permite ejecutar aplicaciones en contenedores sin necesidad de gestionar servidores. Es ideal para aplicaciones que necesitan escalar rápidamente y manejar cargas de trabajo variables. En este módulo, aprenderás cómo desplegar y gestionar aplicaciones en Cloud Run.

Objetivos del Módulo

  • Comprender qué es Cloud Run y sus beneficios.
  • Aprender a desplegar una aplicación en Cloud Run.
  • Configurar y gestionar servicios en Cloud Run.
  • Implementar prácticas de seguridad y optimización en Cloud Run.

¿Qué es Cloud Run?

Cloud Run es un servicio de computación sin servidor que permite ejecutar contenedores HTTP en una infraestructura totalmente gestionada. Ofrece las siguientes ventajas:

  • Escalabilidad automática: Escala automáticamente desde cero hasta miles de instancias según la demanda.
  • Pago por uso: Solo pagas por los recursos que tu aplicación consume.
  • Despliegue sencillo: Despliega contenedores con un solo comando.
  • Integración con otros servicios de GCP: Fácil integración con otros servicios como Cloud Pub/Sub, Cloud Storage, y más.

Desplegando una Aplicación en Cloud Run

Paso 1: Preparar el Entorno

  1. Instalar Google Cloud SDK:

    curl https://sdk.cloud.google.com | bash
    exec -l $SHELL
    gcloud init
    
  2. Autenticar con tu cuenta de GCP:

    gcloud auth login
    
  3. Configurar el proyecto:

    gcloud config set project [PROJECT_ID]
    

Paso 2: Crear una Aplicación en Contenedor

Para este ejemplo, usaremos una simple aplicación en Python con Flask.

  1. Crear el archivo app.py:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'Hello, World!'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)
    
  2. Crear el archivo Dockerfile:

    # Use the official Python image from the Docker Hub
    FROM python:3.8-slim
    
    # Set the working directory
    WORKDIR /app
    
    # Copy the current directory contents into the container at /app
    COPY . /app
    
    # Install any needed packages specified in requirements.txt
    RUN pip install flask
    
    # Make port 8080 available to the world outside this container
    EXPOSE 8080
    
    # Define environment variable
    ENV NAME World
    
    # Run app.py when the container launches
    CMD ["python", "app.py"]
    

Paso 3: Construir y Subir la Imagen del Contenedor

  1. Construir la imagen del contenedor:

    docker build -t gcr.io/[PROJECT_ID]/hello-world .
    
  2. Autenticar Docker con el registro de contenedores de Google:

    gcloud auth configure-docker
    
  3. Subir la imagen al Container Registry:

    docker push gcr.io/[PROJECT_ID]/hello-world
    

Paso 4: Desplegar en Cloud Run

  1. Desplegar la aplicación en Cloud Run:

    gcloud run deploy hello-world 
    --image gcr.io/[PROJECT_ID]/hello-world
    --platform managed
    --region us-central1
    --allow-unauthenticated
  2. Acceder a la URL proporcionada por Cloud Run.

Configuración y Gestión de Servicios en Cloud Run

Configuración de Variables de Entorno

Puedes configurar variables de entorno para tu servicio:

gcloud run services update hello-world \
    --update-env-vars NAME=CloudRun

Escalabilidad y Concurrencia

Puedes ajustar la configuración de escalabilidad y concurrencia:

gcloud run services update hello-world \
    --max-instances 10 \
    --concurrency 80

Seguridad

Autenticación

Para requerir autenticación en tu servicio:

gcloud run services update hello-world \
    --no-allow-unauthenticated

IAM Roles

Asignar roles específicos a usuarios o cuentas de servicio:

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member=serviceAccount:[SERVICE_ACCOUNT_EMAIL] \
    --role=roles/run.invoker

Ejercicio Práctico

Descripción del Ejercicio

Despliega una aplicación Node.js en Cloud Run que responda con "Hello, Cloud Run!".

Solución

  1. Crear el archivo index.js:

    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
        res.send('Hello, Cloud Run!');
    });
    
    const port = process.env.PORT || 8080;
    app.listen(port, () => {
        console.log(`Server running on port ${port}`);
    });
    
  2. Crear el archivo Dockerfile:

    FROM node:14
    
    WORKDIR /app
    
    COPY . /app
    
    RUN npm install
    
    EXPOSE 8080
    
    CMD ["node", "index.js"]
    
  3. Construir y subir la imagen:

    docker build -t gcr.io/[PROJECT_ID]/hello-cloud-run .
    docker push gcr.io/[PROJECT_ID]/hello-cloud-run
    
  4. Desplegar en Cloud Run:

    gcloud run deploy hello-cloud-run 
    --image gcr.io/[PROJECT_ID]/hello-cloud-run
    --platform managed
    --region us-central1
    --allow-unauthenticated

Conclusión

En este módulo, aprendiste a desplegar y gestionar aplicaciones en Cloud Run. Ahora puedes aprovechar la escalabilidad automática y la simplicidad de la computación sin servidor para tus aplicaciones. En el próximo módulo, exploraremos redes avanzadas en GCP.


Errores Comunes y Consejos Adicionales:

  • Error: "Permission denied" al subir la imagen: Asegúrate de que Docker esté autenticado con el registro de contenedores de Google.
  • Error: "Service not found" al desplegar: Verifica que el nombre del servicio y el ID del proyecto sean correctos.
  • Consejo: Utiliza variables de entorno para gestionar configuraciones sensibles y evita hardcodearlas en tu código fuente.

¡Felicidades por completar este módulo! Ahora estás listo para explorar redes avanzadas en GCP.

© Copyright 2024. Todos los derechos reservados