Escribir Cloud Functions

Las funciones de Google Cloud Functions se pueden escribir en Node.js, Python y Go, y se ejecutan en entornos de ejecución de lenguaje específico. El entorno de ejecución de Cloud Functions varía según el tipo de entorno de ejecución. Las páginas de entorno de ejecución de Node.js 6, entorno de ejecución de Node.js 8, entorno de ejecución de Python y entorno de ejecución de Go proporcionan más detalles sobre cada entorno de ejecución, incluidas las versiones de lenguaje, los requisitos para nombre de archivos y la forma de administrar las dependencias.

Tipos de funciones de Cloud Functions

Existen dos tipos de funciones de Cloud Functions: funciones de HTTP y funciones en segundo plano.

Funciones de HTTP

Invocas funciones de HTTP a partir de solicitudes HTTP estándar. Estas solicitudes esperan la respuesta y admiten el manejo de métodos de solicitud HTTP comunes como GET, PUT, POST, DELETE y OPTIONS. Cuando usas Cloud Functions, se aprovisiona automáticamente un certificado TLS para ti, de manera que todas las funciones de HTTP pueden invocarse a través de una conexión segura.

Para obtener detalles, consulta Escribe funciones de HTTP.

Ejemplo:

Node.js

const escapeHtml = require('escape-html');

/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */
exports.helloHttp = (req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
};

Python (Beta)

from flask import escape

def hello_http(request):
    """HTTP Cloud Function.
    Args:
        request (flask.Request): The request object.
        <http://flask.pocoo.org/docs/1.0/api/#flask.Request>
    Returns:
        The response text, or any set of values that can be turned into a
        Response object using `make_response`
        <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.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 'Hello {}!'.format(escape(name))

Go (Beta)

// Package helloworld provides a set of Cloud Function samples.
package helloworld

import (
	"encoding/json"
	"fmt"
	"html"
	"net/http"
)

// HelloHTTP is an HTTP Cloud Function with a request parameter.
func HelloHTTP(w http.ResponseWriter, r *http.Request) {
	var d struct {
		Name string `json:"name"`
	}
	if err := json.NewDecoder(r.Body).Decode(&d); err != nil {
		fmt.Fprint(w, "Hello, World!")
		return
	}
	if d.Name == "" {
		fmt.Fprint(w, "Hello, World!")
		return
	}
	fmt.Fprintf(w, "Hello, %s!", html.EscapeString(d.Name))
}

Funciones en segundo plano

Usa funciones en segundo plano para administrar eventos desde tu infraestructura en la nube, como mensajes en un tema de Cloud Pub/Sub o cambios en el depósito de Cloud Storage.

Para obtener detalles, consulta Escribe funciones en segundo plano.

Ejemplo:

Node.js 6

/**
 * Background Cloud Function.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.helloBackground = (event, callback) => {
  callback(null, `Hello ${event.data.name || 'World'}!`);
};

Node.js 8 (Beta)

/**
 * Background Cloud Function.
 *
 * @param {object} data The event payload.
 * @param {object} context The event metadata.
 */
exports.helloBackground = (data, context) => {
  return `Hello ${data.name || 'World'}!`;
};

Python (Beta)

def hello_background(data, context):
    """Background Cloud Function.
    Args:
         data (dict): The dictionary with data specific to the given event.
         context (google.cloud.functions.Context): The Cloud Functions event
         metadata.
    """
    if data and 'name' in data:
        name = data['name']
    else:
        name = 'World'
    return 'Hello {}!'.format(name)

Go (Beta)

// Package helloworld provides a set of Cloud Function samples.
package helloworld

import (
	"context"
	"log"
)

// PubSubMessage is the payload of a Pub/Sub event. Please refer to the docs for
// additional information regarding Pub/Sub events.
type PubSubMessage struct {
	Data []byte `json:"data"`
}

// HelloPubSub consumes a Pub/Sub message.
func HelloPubSub(ctx context.Context, m PubSubMessage) error {
	name := string(m.Data)
	if name == "" {
		name = "World"
	}
	log.Printf("Hello, %s!", name)
	return nil
}

Estructura código fuente

A fin de que Cloud Functions encuentre la definición de tu función, cada entorno de ejecución tiene ciertos requisitos de estructura para el código fuente. Para obtener más detalles, consulta la página de entornos de ejecución correspondiente:

Especifica dependencias

Especificas las dependencias de tu función de manera idiomática según el entorno de ejecución que usas. Para obtener más detalles, consulta la página de entornos de ejecución correspondiente:

Nombra funciones de Cloud Functions

Cloud Functions tiene una propiedad “name” que se configura en el momento de la implementación, y una vez configurada, no se puede cambiar. El nombre de una función se usa como su identificador y debe ser único dentro de una región. Según la configuración, el nombre de una función también se usa como el punto de entrada a tu código fuente. Por ejemplo, una función llamada foo ejecutará, de manera predeterminada, la función foo() del código fuente que implementas. Si quieres que se ejecute una función diferente, puedes usar la marca --entry-point en el momento de la implementación. Para obtener detalles, consulta la documentación de Implementa Cloud Functions.

Próximos pasos

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Functions