Programar funções

Se você quiser programar funções para que sejam executadas em horários específicos, use o subpacote firebase-functions/v2/scheduler. O método onSchedule cria um tópico do Pub/Sub e usa o Cloud Scheduler para acionar eventos nesse tópico, garantindo que sua função seja executada conforme a programação desejada.

Antes de começar

Para usar essa solução no seu projeto do Firebase, é preciso que o projeto esteja no plano de preços Blaze. Se ainda não estiver no plano Blaze, faça upgrade do seu plano de preços.

O faturamento é obrigatório, mas o custo geral é gerenciável, porque cada job do Cloud Scheduler custa US$ 0,10 (USD) por mês e há um crédito de três jobs por conta do Google, sem custo financeiro. Use a calculadora de preços do Blaze para gerar uma estimativa de custo com base na sua projeção de uso.

As APIs Pub/Sub e Cloud Scheduler precisam estar ativadas no seu projeto. Essas APIs já devem estar ativadas na maioria dos projetos do Firebase. Para verificar isso, acesse o Console do Google Cloud Platform.

Escrever uma função programada

No Cloud Functions para Firebase, a lógica de programação está no código das funções, sem requisitos especiais de tempo de implantação. Para criar uma função programada, use onSchedule para iniciar uma tarefa do Cloud Scheduler. Por exemplo, para limpar contas de usuário inativas uma vez por dia, é possível usar algo assim:

// Run once a day at midnight, to clean up the users
// Manually run the task here https://console.cloud.google.com/cloudscheduler
exports.accountcleanup = onSchedule("every day 00:00", async (event) => {
  // Fetch all user details.
  const inactiveUsers = await getInactiveUsers();

  // Use a pool so that we delete maximum `MAX_CONCURRENT` users in parallel.
  const promisePool = new PromisePool(
      () => deleteInactiveUser(inactiveUsers),
      MAX_CONCURRENT,
  );
  await promisePool.start();

  logger.log("User cleanup finished");
});

As sintaxes do Unix Crontab e do App Engine são suportadas pelo Cloud Scheduler. Por exemplo, caso queira usar o Crontab para selecionar um fuso horário específico a fim de executar uma função planejada, escreva um código semelhante a este:

exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is UTC
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});

O valor de timeZone precisa ser um nome de fuso horário do banco de dados tz . Consulte a referência do Cloud Scheduler para mais informações sobre as propriedades compatíveis.

Implantar uma função programada

Ao implantar uma função programada, o job do programador relacionado e o tópico do Pub/Sub são criados automaticamente. A Firebase CLI reflete o nome do tópico e é possível visualizar o job e o tópico no Console do GCP. O nome do tópico é definido conforme a seguinte convenção:

firebase-scheduled- function_name - region

Exemplo:

firebase-scheduled-scheduledFunctionCrontab-us-east1.