Usa funciones en segundo plano cuando quieras invocar tu función de Cloud Functions de manera indirecta en respuesta a un evento, como un mensaje en un tema de Pub/Sub, un cambio en un bucket de Cloud Storage o un evento de Firebase.
Si deseas obtener información para reintentar funciones en segundo plano, consulta la sección sobre cómo reintentar las funciones en segundo plano.
Entornos de ejecución compatibles
Los siguientes entornos de ejecución admiten funciones en segundo plano:
Lenguaje | Versiones |
---|---|
Node.js | Todos |
Python | Todos |
Go | Todos |
Java | Todos |
Ejemplo de uso
En los siguientes ejemplos, se muestra cómo procesar eventos desde Pub/Sub y Cloud Storage. Para obtener más información sobre el control de eventos de diferentes fuentes, consulta Llama a Cloud Functions.
Ejemplo de Pub/Sub
En este ejemplo, se muestra una función de Cloud Functions activada por eventos de Pub/Sub. Cada vez que se publica un mensaje en un tema de Pub/Sub, se invoca la función y se escribe en el registro un saludo con datos derivados del mensaje.
Node.js
Python
Go
Java
C#
Ruby
Para obtener más información sobre la implementación de funciones de Cloud Functions activadas por eventos de Pub/Sub, consulta Instructivo de Pub/Sub y Activadores de Pub/Sub.
Ejemplo de Cloud Storage
En este ejemplo, se muestra una función de Cloud Functions activada por eventos de Cloud Storage. Cada vez que se crea un objeto en un bucket de Cloud Storage, se invoca la función y se escribe un mensaje sobre el cambio en el registro.
Node.js
Python
Go
Java
C#
Ruby
Para obtener más información sobre cómo implementar funciones de Cloud Functions activadas por eventos de Cloud Storage, consulta Activadores de Cloud Storage y el Instructivo de Cloud Storage.
Parámetros de las funciones
Las funciones en segundo plano reciben argumentos que poseen datos asociados con el evento que activó la ejecución de la función. A continuación se describen los parámetros de este tipo de funciones:
Node.js
En los entornos de ejecución de Node.js, tu función recibe los argumentos (data, context, callback)
:
Propiedad | Descripción | Tipo |
---|---|---|
data |
El objeto de datos para el evento. Su tipo depende del evento. | Objeto |
context |
El objeto de contexto del evento. | Objeto |
context.eventId |
Un ID único para el evento. Por ejemplo: "70172329041928" . |
String |
context.timestamp |
La fecha/hora en la que se creó este evento. Por ejemplo: "2018-04-09T07:56:12.975Z" .
|
String (ISO 8601) |
context.eventType |
El tipo de evento. Por ejemplo: "google.pubsub.topic.publish" .
|
String |
context.resource |
El recurso que emitió el evento. | Objeto |
callback |
Una devolución de llamada para indicar que la ejecución de la función se completó. Sigue la convención de “errback” que interpreta el primer argumento como un error. callback(); // Success callback(null, 'Success!'); // Success callback(1); // Error callback(new Error('Failed')); // Error |
Función |
Python
En el entorno de ejecución de Python, tu función recibe los argumentos (data, context)
:
Propiedad | Descripción | Tipo |
---|---|---|
data |
Un diccionario que contiene los datos de un evento. Su formato depende del evento. | Objeto de Cloud Storage o PubsubMessage |
context |
El objeto de contexto del evento. | Contexto |
context.event_id |
Un ID único para el evento. Por ejemplo: "70172329041928" . |
String |
context.timestamp |
La fecha/hora en la que se creó este evento. Por ejemplo: "2018-04-09T07:56:12.975Z" .
|
String (ISO 8601) |
context.event_type |
El tipo de evento. Por ejemplo: "google.pubsub.topic.publish" .
|
String |
context.resource |
El recurso que emitió el evento. | String |
Go
En el entorno de ejecución de Go, tu función recibe los argumentos (ctx, Event)
:
Propiedad | Descripción | Tipo |
---|---|---|
ctx |
Un valor context.Context que transporta metadatos sobre el evento. Puedes recuperar los metadatos mediante el paquete cloud.google.com/go/functions/metadata .
|
context.Context
|
Event |
Una
La definición de
Ten en cuenta que tu |
struct definido por el usuario |
Java
En el entorno de ejecución de Java, tu función recibe los parámetros (event, context)
. Existen los siguientes dos tipos de funciones en segundo plano, BackgroundFunction<T>
y RawBackgroundFunction
:
Propiedad | Descripción | Tipo |
---|---|---|
event |
La carga útil del evento. El contenido de la carga útil depende del activador para el que se registró la función.
En el caso de BackgroundFunction<T> , el tipo de este parámetro es T , que es una clase definida por el usuario. La carga útil JSON del evento se deserializa en una instancia de esta clase con Gson.fromJson .
En el caso de RawBackgroundFunction , el tipo de este parámetro es String y corresponde a la carga útil JSON del evento.
|
Definida por el usuario o String |
context |
Un objeto Context de solo lectura que contiene metadatos sobre el evento.
|
Context
|
C#
En el entorno de ejecución de .NET Core 3.1, existen dos variedades de funciones de CloudEvent: ICloudEvent<T>
y ICloudEvent
(también conocidas como función de CloudEvent sin tipo).
Si implementas ICloudEvent<T>
, los parámetros (cloudEvent, data, cancellationToken)
se pasan a la función. Si implementas ICloudEvent
, los parámetros (cloudEvent, cancellationToken)
se pasan a la función.
Propiedad | Descripción |
---|---|
cloudEvent |
El CloudEvent que activó la función, contiene los metadatos sobre el evento y los datos sin procesar. |
data |
Los datos extraídos del evento, del tipo T , en el que T es el argumento de tipo de tu función. Este parámetro no forma parte de las funciones de CloudEvent sin tipo.
|
cancellationToken |
Un token de cancelación para observar que la solicitud se anula. |
Ruby
En el entorno de ejecución de Ruby, las funciones de CloudEvent reciben un solo parámetro, un objeto de CloudEvent de tipo CloudEvents::Event::V1
. Las propiedades de este objeto incluyen la siguiente información:
Property | Descripción | Tipo |
---|---|---|
id |
Un ID único para el evento. Por ejemplo: 70172329041928 .
|
String
|
time |
La fecha/hora en la que se creó este evento. | DateTime |
type |
El tipo de evento. Por ejemplo: google.cloud.pubsub.topic.v1.messagePublished . |
String |
source |
El recurso que emitió el evento. Por ejemplo: //pubsub.googleapis.com/projects/sample-project/topics/gcf-test .
|
URI
|
data |
El objeto de datos para el evento. Es un hash cuyas claves dependen del evento. | Hash |
Los datos del evento dependen del activador para el que se registró la función, por ejemplo, Pub/Sub o Cloud Storage. En el caso de las funciones que se activaron directamente a través del comando gcloud functions call
, los datos del evento contienen el mensaje que enviaste directamente.
Finaliza funciones en segundo plano
Si una función crea tareas en segundo plano (como subprocesos, promesas, devoluciones de llamada o procesos del sistema), debes finalizar o resolver estas tareas antes de regresar de tu función. Es posible que no se completen las tareas que no se finalicen antes de regresar de una ejecución en particular y causen un comportamiento indefinido.
Los entornos de ejecución de Node.js permiten que tus funciones proporcionen referencias a tareas en curso y pidan a Cloud Functions que las espere. Puede hacerlo de una de las siguientes maneras:
- Muestra un
Promise
que se resuelve una vez que se complete la función. - Invoca el argumento
callback
en una función de devolución de llamada cuando finalice.
Próximos pasos
- Implementa Cloud Functions
- Llama a funciones del activador de Pub/Sub
- Llama a funciones del activador de Cloud Storage
- Instructivo de Cloud Functions con Pub/Sub
- Instructivo de Cloud Functions con Cloud Storage