Introducción a Cloud Functions

Google Cloud Functions es un servicio de computación sin servidor que permite ejecutar código en respuesta a eventos sin necesidad de gestionar servidores. Es ideal para tareas como procesamiento de datos, integración de sistemas y automatización de flujos de trabajo.

Conceptos Clave

  • Sin servidor (Serverless): No necesitas gestionar la infraestructura subyacente.
  • Eventos: Cloud Functions se activa en respuesta a eventos, como cambios en Cloud Storage, mensajes en Pub/Sub, o solicitudes HTTP.
  • Escalabilidad automática: Las funciones se escalan automáticamente según la demanda.

Configuración Inicial

Paso 1: Crear un Proyecto en GCP

  1. Accede a la Consola de Google Cloud.
  2. Crea un nuevo proyecto o selecciona uno existente.
  3. Habilita la API de Cloud Functions desde la biblioteca de APIs.

Paso 2: Instalar y Configurar el SDK de Google Cloud

  1. Descarga e instala el SDK de Google Cloud.
  2. Autentícate con tu cuenta de Google:
    gcloud auth login
    
  3. Configura el proyecto:
    gcloud config set project [PROJECT_ID]
    

Creación de una Función Básica

Ejemplo: Función HTTP "Hello World"

Código de la Función

Crea un archivo index.js con el siguiente contenido:

exports.helloWorld = (req, res) => {
  res.send('Hello, World!');
};

Despliegue de la Función

  1. Despliega la función usando el comando gcloud:

    gcloud functions deploy helloWorld --runtime nodejs14 --trigger-http --allow-unauthenticated
    
    • --runtime nodejs14: Especifica el entorno de ejecución.
    • --trigger-http: Define que la función se activará mediante una solicitud HTTP.
    • --allow-unauthenticated: Permite el acceso sin autenticación.
  2. Una vez desplegada, obtendrás una URL para invocar la función.

Ejercicio Práctico

Objetivo: Crear una función que responda con un mensaje personalizado.

  1. Modifica el archivo index.js para que la función responda con un mensaje personalizado basado en un parámetro de consulta name:

    exports.helloWorld = (req, res) => {
      const name = req.query.name || 'World';
      res.send(`Hello, ${name}!`);
    };
    
  2. Despliega la función:

    gcloud functions deploy helloWorld --runtime nodejs14 --trigger-http --allow-unauthenticated
    
  3. Prueba la función accediendo a la URL proporcionada y añadiendo el parámetro de consulta name:

    https://REGION-PROJECT_ID.cloudfunctions.net/helloWorld?name=YourName
    

Integración con Otros Servicios de GCP

Ejemplo: Activación por Cambios en Cloud Storage

Código de la Función

Crea un archivo index.js con el siguiente contenido:

const { Storage } = require('@google-cloud/storage');
const storage = new Storage();

exports.processFile = async (event, context) => {
  const bucketName = event.bucket;
  const fileName = event.name;

  console.log(`Processing file: ${fileName} in bucket: ${bucketName}`);

  // Aquí puedes añadir lógica para procesar el archivo
};

Despliegue de la Función

  1. Despliega la función usando el comando gcloud:
    gcloud functions deploy processFile --runtime nodejs14 --trigger-resource YOUR_BUCKET_NAME --trigger-event google.storage.object.finalize
    
    • --trigger-resource YOUR_BUCKET_NAME: Especifica el bucket de Cloud Storage.
    • --trigger-event google.storage.object.finalize: Define que la función se activará cuando se finalice la creación de un objeto en el bucket.

Ejercicio Práctico

Objetivo: Crear una función que registre en los logs el nombre de los archivos subidos a un bucket de Cloud Storage.

  1. Modifica el archivo index.js para que la función registre el nombre del archivo subido:

    exports.logFileName = (event, context) => {
      const fileName = event.name;
      console.log(`File uploaded: ${fileName}`);
    };
    
  2. Despliega la función:

    gcloud functions deploy logFileName --runtime nodejs14 --trigger-resource YOUR_BUCKET_NAME --trigger-event google.storage.object.finalize
    
  3. Sube un archivo al bucket y verifica los logs en la consola de GCP.

Errores Comunes y Soluciones

Error: "PERMISSION_DENIED"

  • Causa: La función no tiene permisos adecuados.
  • Solución: Asegúrate de que la cuenta de servicio asociada a la función tiene los permisos necesarios.

Error: "Quota Exceeded"

  • Causa: Has superado las cuotas de uso de Cloud Functions.
  • Solución: Revisa y ajusta las cuotas en la consola de GCP o solicita un aumento de cuota.

Conclusión

En esta sección, hemos aprendido a crear y desplegar funciones en Google Cloud Functions, tanto para solicitudes HTTP como para eventos de Cloud Storage. También hemos explorado cómo integrar Cloud Functions con otros servicios de GCP y cómo manejar errores comunes. En el siguiente módulo, profundizaremos en otros servicios de DevOps y monitoreo en GCP.


Resumen:

  • Conceptos Clave: Sin servidor, eventos, escalabilidad automática.
  • Configuración Inicial: Crear proyecto, instalar SDK, configurar proyecto.
  • Ejemplo Básico: Función HTTP "Hello World".
  • Integración con Otros Servicios: Activación por cambios en Cloud Storage.
  • Errores Comunes: PERMISSION_DENIED, Quota Exceeded.

Prepárate para el siguiente tema donde exploraremos los repositorios de código en la nube y cómo integrarlos en tus flujos de trabajo de DevOps.

© Copyright 2024. Todos los derechos reservados