Español

Libere el poder de la computación sin servidor con Google Cloud Functions. Esta guía explora los desencadenadores HTTP, proporcionando a los desarrolladores de todo el mundo el conocimiento para crear aplicaciones escalables y basadas en eventos.

Google Cloud Functions: Una Guía Completa sobre los Desencadenadores HTTP

Google Cloud Functions (GCF) es un entorno de ejecución sin servidor que le permite crear y conectar servicios en la nube. Con Cloud Functions, escribe funciones simples de un solo propósito que se adjuntan a los eventos emitidos desde su infraestructura y servicios en la nube. Su función se ejecuta cuando ocurre el evento que está observando. Este enfoque le permite desarrollar aplicaciones basadas en eventos sin administrar servidores o tiempos de ejecución.

Una de las formas más comunes de activar una función de Cloud es a través de una solicitud HTTP. Esta guía profundizará en el mundo de los desencadenadores HTTP en Google Cloud Functions, brindándole el conocimiento para construir aplicaciones potentes, escalables y rentables.

¿Qué son los Desencadenadores HTTP?

Un desencadenador HTTP le permite ejecutar su función de Cloud en respuesta a una solicitud HTTP. Esencialmente, cuando se envía una solicitud HTTP a una URL específica, Google Cloud Functions ejecutará automáticamente la función asociada. Esto hace que los desencadenadores HTTP sean ideales para construir APIs, webhooks y aplicaciones web basadas en eventos.

Beneficios clave del uso de desencadenadores HTTP:

Creación de una función de Cloud con un desencadenador HTTP

Repasemos el proceso de creación de una función de Cloud simple con un desencadenador HTTP. Crearemos una función que responda con un mensaje "¡Hola, Mundo!". Este ejemplo se puede adaptar a varias ubicaciones globales simplemente modificando la cadena de salida.

Requisitos previos:

Pasos:

  1. Cree un nuevo proyecto (si no tiene uno):

    Si aún no tiene un proyecto de GCP, cree uno en Google Cloud Console.

  2. Habilite la API de Cloud Functions:

    En la consola de Cloud, navegue a la API de Cloud Functions y habilítela.

  3. Cree un directorio de funciones:

    Cree un nuevo directorio para su función de Cloud. Por ejemplo:

    mkdir hello-http
    cd hello-http
  4. Escriba el código de la función:

    Cree un archivo llamado `main.py` (o `index.js` para Node.js) con el siguiente código:

    Python (main.py):

    def hello_http(request):
        """Función HTTP Cloud.
        Args:
            request (flask.Request): El objeto de solicitud.
            
        Returns:
            El texto de la respuesta, o cualquier conjunto de valores que se pueden convertir en un
            Objeto de respuesta usando `make_response`
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hola, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hola, ${name}!`);
    };
    
  5. Cree un archivo de requisitos (solo Python):

    Si está utilizando Python, cree un archivo llamado `requirements.txt` y agregue cualquier dependencia que necesite su función. Para este ejemplo, no es estrictamente necesario, pero es una buena práctica incluir uno. Puede dejarlo vacío si no tiene ninguna dependencia.

  6. Implemente la función:

    Use el comando `gcloud functions deploy` para implementar su función. Reemplace `YOUR_FUNCTION_NAME` con el nombre deseado para su función.

    Python:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    Explicación de los parámetros:

    • `YOUR_FUNCTION_NAME`: El nombre que desea darle a su función de Cloud.
    • `--runtime`: El entorno de tiempo de ejecución para su función (por ejemplo, `python39`, `nodejs16`).
    • `--trigger-http`: Especifica que la función debe activarse por solicitudes HTTP.
    • `--allow-unauthenticated`: Permite que cualquiera invoque la función sin autenticación. Advertencia: ¡Tenga cuidado al habilitar esto en entornos de producción! Considere implementar la autenticación y autorización adecuadas.
  7. Pruebe la función:

    Después de la implementación, el comando `gcloud` mostrará la URL de su función. Luego, puede probarla enviando una solicitud HTTP a esa URL utilizando una herramienta como `curl` o Postman.

    curl YOUR_FUNCTION_URL

    Debería ver el mensaje "¡Hola, Mundo!" en la respuesta. También puede pasar un nombre como parámetro de consulta:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Esto debería devolver "¡Hola, YourName!"

Comprendiendo la solicitud y respuesta HTTP

Cuando una función de Cloud es activada por una solicitud HTTP, recibe un objeto que contiene información sobre la solicitud. Este objeto normalmente incluye:

Su función debe devolver entonces una respuesta HTTP, que incluye:

Ejemplo: Manejo de diferentes métodos HTTP

Aquí hay un ejemplo de cómo manejar diferentes métodos HTTP en su función de Cloud:

Python (main.py):

from flask import escape

def http_method(request):
    """Responde a cualquier solicitud HTTP.
    Args:
        request (flask.Request): Objeto de solicitud HTTP.
    Returns:
        El texto de la respuesta o cualquier conjunto de valores que se pueden convertir en un
        Objeto de respuesta usando
        `make_response`.
    """
    if request.method == 'GET':
        return '¡Esta es una solicitud GET!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'Esta es una solicitud POST con el mensaje: {message}'
        else:
            return 'Esta es una solicitud POST sin un mensaje.'
    else:
        return 'Método HTTP no compatible.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('¡Esta es una solicitud GET!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`Esta es una solicitud POST con el mensaje: ${message}`);
      } else {
        res.status(200).send('Esta es una solicitud POST sin un mensaje.');
      }
      break;
    default:
      res.status(405).send('¡Método HTTP no compatible!');
      break;
  }
};

Recuerde implementar la función actualizada usando el comando `gcloud functions deploy`.

Asegurando sus desencadenadores HTTP

La seguridad es primordial cuando se trabaja con desencadenadores HTTP, especialmente cuando se trata de datos confidenciales u operaciones críticas. Aquí hay algunas consideraciones de seguridad clave:

Autenticación y autorización

De forma predeterminada, Cloud Functions activadas por HTTP son de acceso público si usa `--allow-unauthenticated`. En la mayoría de los escenarios de producción, querrá restringir el acceso a usuarios o servicios autorizados. Google Cloud ofrece varias opciones para la autenticación y la autorización:

Validación de entrada

Siempre valide los datos de entrada recibidos por su función de Cloud para evitar vulnerabilidades de seguridad, como inyección SQL o secuencias de comandos en sitios cruzados (XSS). Utilice técnicas de sanitización y escape apropiadas para protegerse contra entradas maliciosas.

HTTPS

Asegúrese de que su función de Cloud solo sea accesible a través de HTTPS para cifrar la comunicación entre el cliente y la función. Google Cloud Functions proporciona automáticamente puntos finales HTTPS.

Limitación de velocidad

Implemente la limitación de velocidad para evitar el abuso y los ataques de denegación de servicio (DoS). Puede utilizar servicios como Google Cloud Armor para proteger sus Cloud Functions del tráfico excesivo.

Casos de uso para desencadenadores HTTP

Los desencadenadores HTTP son versátiles y se pueden usar en una amplia gama de aplicaciones. Aquí hay algunos casos de uso comunes:

Ejemplos en diferentes industrias

Técnicas avanzadas

Usando variables de entorno

Las variables de entorno le permiten configurar su función de Cloud sin codificar información confidencial o valores de configuración en su código. Puede establecer variables de entorno utilizando el comando `gcloud functions deploy` o en Google Cloud Console.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

En su código, puede acceder a las variables de entorno utilizando el diccionario `os.environ` (Python) o el objeto `process.env` (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Use the API key in your function
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Use the API key in your function
  res.status(200).send(`API Key: ${apiKey}`);
};

Manejo de tareas asíncronas

Para tareas de larga duración o computacionalmente intensivas, es mejor usar el procesamiento asíncrono para evitar bloquear la solicitud HTTP. Puede usar servicios como Google Cloud Tasks o Cloud Pub/Sub para descargar estas tareas a colas separadas.

Manejo de errores y registro

Implemente un manejo de errores y registro robustos en sus Cloud Functions para identificar y resolver problemas rápidamente. Use Google Cloud Logging para recopilar registros de sus funciones y monitorear su rendimiento.

Mejores prácticas

Solución de problemas comunes

Conclusión

Google Cloud Functions con desencadenadores HTTP proporcionan una forma potente y flexible de crear aplicaciones sin servidor. Al comprender los conceptos y las técnicas discutidas en esta guía, puede aprovechar el poder de Cloud Functions para crear soluciones escalables, rentables y basadas en eventos para una audiencia global. ¡Adopte la revolución sin servidor y libere todo el potencial de sus aplicaciones en la nube!