Se você quiser agendar funções para serem executadas em horários especificados, use o manipulador onSchedule
fornecido por firebase-functions/v2/scheduler
. Essas funções usam o Cloud Scheduler para invocar a lógica da função nos horários ou intervalos que você definir.
Antes de você começar
Para usar esta solução em seu projeto Firebase, seu projeto deve estar no plano de preços Blaze. Se ainda não estiver no plano Blaze, atualize seu plano de preços .
Embora o faturamento seja necessário, você pode esperar que o custo geral seja gerenciável, já que cada trabalho do Cloud Scheduler custa US$ 0,10 (USD) por mês e há um limite de três trabalhos por conta do Google, sem nenhum custo. Use a calculadora de preços Blaze para gerar uma estimativa de custo com base no uso projetado.
A API Cloud Scheduler deve estar ativada para seu projeto. Já deve estar habilitado para a maioria dos projetos do Firebase; você pode verificar no console do Google Cloud Platform .
Escreva uma função agendada
No Cloud Functions para Firebase, a lógica de agendamento reside no código de funções, sem requisitos especiais de tempo de implantação. Por exemplo, para limpar contas de usuários inativas uma vez por dia, você poderia escrever uma função começando com as seguintes instruções de importação:
Node.js
// The Cloud Functions for Firebase SDK to set up triggers and logging.
const {onSchedule} = require("firebase-functions/v2/scheduler");
const {logger} = require("firebase-functions");
// The Firebase Admin SDK to delete inactive users.
const admin = require("firebase-admin");
admin.initializeApp();
// The es6-promise-pool to limit the concurrency of promises.
const PromisePool = require("es6-promise-pool").default;
// Maximum concurrent account deletions.
const MAX_CONCURRENT = 3;
Pitão
# The Cloud Functions for Firebase SDK to set up triggers and logging.
from firebase_functions import scheduler_fn
# The Firebase Admin SDK to delete users.
import firebase_admin
from firebase_admin import auth
firebase_admin.initialize_app()
Então, você poderia usar onSchedule
para iniciar uma tarefa do Cloud Scheduler:
Node.js
// 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");
});
Pitão
# Run once a day at midnight, to clean up inactive users.
# Manually run the task here https://console.cloud.google.com/cloudscheduler
@scheduler_fn.on_schedule(schedule="every day 00:00")
def accountcleanup(event: scheduler_fn.ScheduledEvent) -> None:
"""Delete users who've been inactive for 30 days or more."""
user_page: auth.ListUsersPage | None = auth.list_users()
while user_page is not None:
inactive_uids = [
user.uid for user in user_page.users if is_inactive(user, timedelta(days=30))
]
auth.delete_users(inactive_uids)
user_page = user_page.get_next_page()
A sintaxe do Unix Crontab e do App Engine é compatível com o Cloud Scheduler. Por exemplo, para usar o Crontab, faça algo assim:
Node.js
exports.scheduledFunctionCrontab = onSchedule("5 11 * * *", async (event) => {
// ...
});
Pitão
@scheduler_fn.on_schedule(schedule="5 11 * * *")
Implantar uma função agendada
Ao implementar uma função agendada, um trabalho do agendador e uma função HTTP são criados automaticamente. A CLI do Firebase ecoa o nome da função, e você pode visualizar o trabalho e a função no Console do GCP . O tópico é nomeado de acordo com a seguinte convenção:
firebase-schedule- function_name - region
Por exemplo:
firebase-schedule-accountcleanup-us-east1.
No horário agendado, a conta de serviço de computação padrão invoca a função HTTP associada. Isso significa que apenas o job associado do Cloud Scheduler tem permissão para executar a função.