Há tarefas que ninguém lança: acontecem todas as noites. Apagar ficheiros temporários, enviar o resumo do dia, verificar que um site responde, fazer uma cópia. Num servidor clássico usava-se o cron; na AWS, quando a tarefa é um programa pequeno, a forma limpa é uma função Lambda (o código) mais um agendador (o despertador) que a chame à hora que disser. O agendador chama-se EventBridge Scheduler e é grátis na prática para umas poucas execuções por dia. Este guia liga as duas coisas.
Antes de começar: o que significa cada coisa
- Função Lambda
- Um pedaço de código seu guardado na Amazon que se executa quando algo o chama. Paga por execução, não por ter nada ligado.
- EventBridge Scheduler
- O despertador da AWS: executa uma ação (por exemplo, chamar a sua função) às horas que agendar.
- Agendamento
- Cada "alarme" do despertador: quando e a quem chamar.
- Expressão cron
- A forma clássica de escrever horários repetitivos com números: minuto, hora, dia do mês, mês, dia da semana. O guia dá-lhe as expressões feitas.
- Fuso horário
- O Scheduler permite escolher o seu (Europe/Madrid), por isso as 3:00 são as 3:00 também com a mudança de hora.
- Função (role) de execução
- A permissão de que o despertador precisa para chamar a sua função. O Scheduler cria-a sozinho se lho pedir.
- CloudWatch Logs
- Onde a função escreve o seu diário de cada vez que se executa. É como verifica que funcionou.
Passo a passo
Prepare a função para que funcione sem ninguém à frente
Abra a função na consola do Lambda e teste-a com o botão Testar com um evento vazio (
{}): deve terminar sem erro. Se precisar de dados (uma palavra-passe, um endereço), ponha-os nas variáveis de ambiente da função (Configuração), não no código. E verifique o tempo limite (Configuração geral): se a tarefa demora dois minutos e o limite é de três segundos, vai falhar todas as noites.Abra o agendador
Procure Amazon EventBridge na consola e, no menu da esquerda, Scheduler, Programações, Criar programação. Nome:
limpieza-nocturna. Grupo: o predefinido.Diga quando
Padrão: Programação recorrente, tipo Programação baseada em cron. Para todas as noites às 3:00:
cron(0 3 * * ? *)Para as 8:00 de segunda a sexta:
cron(0 8 ? * MON-FRI *). Para o dia 1 de cada mês às 7:00:cron(0 7 1 * ? *). Por baixo, Fuso horário: escolha o seu (Europe/Madrid). O ecrã mostra-lhe as próximas dez execuções para que confirme que são as que espera. Janela flexível: Desativada se quiser a hora exata.Diga a quem chamar
Destino: Modelos de destino, AWS Lambda - Invoke. Selecione a sua função na lista. Em Carga (payload) pode deixar
{}ou passar dados que a função leia do evento, por exemplo{"modo": "nocturno"}: assim a mesma função pode fazer coisas diferentes consoante quem a chama.Permissões e novas tentativas
Em Configurações, deixe Criar uma nova função para esta programação: o Scheduler dar-lhe-á exatamente a permissão de invocar essa função. Na política de novas tentativas, 2 ou 3 tentativas estão bem para uma tarefa que não faz mal repetir; para uma que envia e-mails, ponha 0 para não enviar duas vezes. Deixe a ação após a conclusão em NENHUMA (o agendamento recorrente não se apaga). Seguinte, reveja e Criar programação.
Verifique a primeira execução
No dia seguinte (ou ponha uma execução de teste daqui a cinco minutos e depois mude-a), abra a função, separador Monitorar: o gráfico de invocações deve mostrar uma à hora agendada, e Visualizar logs do CloudWatch mostra o que escreveu. Se não houver nada, veja o agendamento no Scheduler: o seu estado deve ser "Habilitada" e o separador de detalhes mostra a última execução e se falhou.
O que pode correr mal
Não se executou à hora que pus
Deixou o fuso horário em UTC: no inverno é uma hora a menos do que em Espanha, no verão duas. Edite o agendamento e escolha Europe/Madrid. Ou a expressão cron tem os campos trocados: na AWS a ordem é minuto, hora, dia do mês, mês, dia da semana, ano, e um dos dois "dia" tem de ser ?.
Executa-se mas a função falha
O problema é a função, não o despertador. Veja os registos do CloudWatch: a exceção está lá. O habitual: falta-lhe uma permissão para fazer o que faz (a sua própria função de execução), ou esgota o tempo limite.
Executa-se duas vezes
Novas tentativas: a primeira execução falhou ou demorou demasiado e o Scheduler voltou a tentar. Baixe as tentativas para 0 se repetir for um problema, e faça com que a função não demore mais do que o seu limite.
Quero parar a tarefa uns dias
No Scheduler, selecione o agendamento e Desabilitar. Fica guardado; volta a habilitá-lo quando quiser. Não é preciso apagá-lo.
No Simplio
No Simplio cada função Lambda mostra a sua última execução, se correu bem e o que escreveu, e agendá-la é escolher "todos os dias", "todas as semanas" ou "todos os meses" e uma hora no seu fuso horário: o Simplio cria o agendamento e a permissão. Se uma execução falhar, avisa-o por e-mail. E pode executá-la agora mesmo com um botão e ver a resposta, sem sair do ecrã.
O mesmo, na AWS e no Simplio
| Na consola da AWS | No Simplio | |
|---|---|---|
| Agendar a função | EventBridge Scheduler: expressão cron, fuso horário, destino, função, tentativas: 6 passos | Na função: "todos os dias às 3:00" numa lista e uma hora, no seu fuso horário |
| Saber se foi executada | Gráfico de Monitorar e registos do CloudWatch | Última execução, resultado e registos no cartão da função; aviso por e-mail se falhar |
| Testá-la à mão | Botão Testar no Lambda com um evento JSON | Botão Executar agora, com a resposta e os registos no mesmo ecrã |