¿Cloud Functions para Firebase se activa a tiempo?

Respuestas:

113

Actualización 18-04-2019

Ahora existe una forma muy sencilla de implementar código programado en Cloud Functions a través de Firebase.

Puede utilizar una sintaxis de texto simple:

export scheduledFunctionPlainEnglish =
functions.pubsub.schedule('every 5 minutes').onRun((context) => {
    console.log('This will be run every 5 minutes!');
})

O el formato de tabla cron más flexible:

export scheduledFunctionCrontab =
functions.pubsub.schedule('5 11 * * *').onRun((context) => {
    console.log('This will be run every day at 11:05 AM UTC!');
});

Para obtener más información sobre esto, consulte:

Tenga en cuenta que su proyecto debe estar en un plan Blaze para que esto funcione, así que dejo las opciones alternativas a continuación como referencia.

Si desea programar una única invocación de una función de la nube en un retraso desde dentro de la ejecución de otro activador, puede usar Cloud Tasks para configurar eso. Lea este artículo para obtener un ejemplo extendido de cómo puede funcionar.

Respuesta original a continuación ...


Todavía no hay un disparador de tipo runat / cron incorporado.

Por el momento, la mejor opción es utilizar un servicio externo para activar una función HTTP periódicamente. Consulte este ejemplo en el repositorio functions-samples para obtener más información. O use Google Cloud Scheduler, que se presentó recientemente, para activar Cloud Functions a través de PubSub o HTTPS:

ingrese la descripción de la imagen aquí

También recomiendo leer esta publicación en el blog de Firebase: Cómo programar (Cron) trabajos con Cloud Functions para Firebase y este video: Timing Cloud Functions para Firebase usando un disparador HTTP y Cron .

Ese último enlace usa cron-job.org para activar Cloud Functions y funciona para proyectos que están en un plan gratuito. Tenga en cuenta que esto permite que cualquiera llame a su función sin autorización, por lo que es posible que desee incluir algún mecanismo de protección contra abusos en el código.

Frank van Puffelen
fuente
1
Nada cambió alrededor de esto. Incluir el hecho de que cron-job.orgJen habla en la publicación del blog es de uso gratuito.
Frank van Puffelen
2
El video de Jen se ha etiquetado como obsoleto. Entonces, ¿hay otra forma de hacerlo?
b-fg
2
El enfoque es tan válido hoy como lo era cuando se hizo el video (y la publicación del blog). La sintaxis ha cambiado ligeramente, pero no creo que este caso específico se vea afectado por eso. Si tiene problemas para hacer que esto funcione, abra una pregunta que muestre lo que ya ha hecho.
Frank van Puffelen
1
¡Vaya, finalmente implementaron una forma de hacerlo de manera simple! Finalmente !!!! Gracias por la actualización
schankam
1
Desde la página de Cloud Scheduler:, Each Cloud Scheduler job costs $0.10 (USD) per monthasumir "trabajo" no significa cada vez que se activa lo programado, ¿sino el costo por temporizador? es decir, un trabajo que se ejecuta cada minuto solo cuesta $ 0.10? (excluyendo cualquier función en la nube a la que llame).
Aaron Ash
12

Lo que puede hacer es activar una instancia de AppEngine que se activa mediante un trabajo cron y se emite a PubSub. Escribí una publicación de blog específicamente sobre eso, es posible que desee echar un vistazo:

https://mhaligowski.github.io/blog/2017/05/25/scheduled-cloud-function-execution.html

mhaligowski
fuente
1
¿Cuál es el costo estimado por mes para un trabajo cron que se activa una vez cada hora?
Ehtesham Hasan
3
@EhteshamHasan Parece que es potencialmente gratis: cloud.google.com/free . Actualmente 28 horas de instancia / día gratis; Además, está la instancia f1-micro de Google Compute Engine con Linux ejecutando crons para un cajero automático gratuito.
bitsoflogic