O Cloud Functions para Firebase dispara na hora certa?

Respostas:

113

Atualização 18/04/2019

Agora existe uma maneira muito simples de implantar o código programado no Cloud Functions por meio do Firebase.

Você pode usar uma sintaxe de texto simples:

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

Ou o formato de tabela cron mais flexível:

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

Para saber mais sobre isso, consulte:

Observe que seu projeto precisa estar em um plano Blaze para que isso funcione, então estou deixando as opções alternativas abaixo para referência.

Se você quiser agendar uma única invocação de um Cloud Function em um atraso de dentro da execução de outro gatilho, pode usar o Cloud Tasks para configurar isso. Leia este artigo para obter um exemplo detalhado de como isso pode funcionar.

Resposta original abaixo ...


Ainda não há um gatilho do tipo runat / cron integrado.

No momento, a melhor opção é usar um serviço externo para acionar uma função HTTP periodicamente. Consulte este exemplo no repositório de exemplos de funções para obter mais informações. Ou use o Google Cloud Scheduler introduzido recentemente para acionar o Cloud Functions por meio de PubSub ou HTTPS:

insira a descrição da imagem aqui

Também recomendo a leitura desta postagem no blog do Firebase: Como agendar (Cron) jobs com Cloud Functions para Firebase e este vídeo: Cronometrando o Cloud Functions para Firebase usando um gatilho HTTP e Cron .

Esse último link usa cron-job.org para acionar o Cloud Functions e funciona para projetos que estão em um plano gratuito. Observe que isso permite que qualquer pessoa chame sua função sem autorização, portanto, você pode querer incluir algum mecanismo de proteção contra abuso no próprio código.

Frank van Puffelen
fonte
1
Nada mudou em torno disso. Incluindo o fato de que o cron-job.orgque a Jen fala no post do blog é de uso gratuito.
Frank van Puffelen,
2
O vídeo de Jen foi marcado como obsoleto. Então, há outra maneira de fazer isso?
b-fg
2
A abordagem é tão válida hoje quanto era quando o vídeo (e a postagem no blog) foram feitos. A sintaxe mudou um pouco, mas não acho que esse caso específico seja afetado por isso. Se você está tendo problemas para fazer este trabalho, abra uma pergunta que mostre o que você já fez.
Frank van Puffelen
1
Uau, finalmente eles implementaram uma maneira de fazer isso de forma simples! Finalmente !!!! Obrigado pela atualização
schankam de
1
Na página do Cloud Scheduler:, Each Cloud Scheduler job costs $0.10 (USD) per monthpresumir que "job" não significa cada vez que o item programado é disparado, mas o custo por cronômetro? ou seja, um trabalho executado a cada minuto custa apenas US $ 0,10? (excluindo quaisquer funções de nuvem que ele chama).
Aaron Ash
12

O que você pode fazer é ativar uma instância do AppEngine que é acionada pelo cron job e emite para o PubSub. Eu escrevi uma postagem no blog especificamente sobre isso, você pode querer dar uma olhada:

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

Mhaligowski
fonte
1
Qual é o custo estimado por mês para um cron job que dispara uma vez a cada hora?
Ehtesham Hasan
3
@EhteshamHasan Parece que é potencialmente gratuito: cloud.google.com/free . Atualmente 28 horas de instância / dia grátis; Além disso, há a instância f1-micro do Google Compute Engine com Linux executando crons gratuitamente.
bitsoflogic