Suporte nativo para eventos agendados adicionado em 8 de outubro de 2015:
Conforme anunciado nesta postagem do blog da AWS , o agendamento agora é suportado como um tipo de fonte de eventos (também chamado de gatilhos) chamado " CloudWatch Events - Schedule " e pode ser expresso como uma taxa ou uma expressão cron.
Adicionar evento agendado a uma nova lambda
Navegue para a etapa de criação 'Configurar gatilhos' e especifique o gatilho 'CloudWatch Event - Schedule'. Exemplo de configuração abaixo:
Adicionar evento agendado a um lambda existente
Navegue até a guia 'Triggers' do seu lambda, selecione 'Add Trigger' e especifique o gatilho 'CloudWatch Event - Schedule'. Exemplo de captura de tela em que eu tenho um lambda existente com um gatilho SNS:
Uma vez carregada, a interface do usuário para configurar esse gatilho é idêntica à captura de tela na seção "Adicionar evento agendado a um novo lambda" acima.
Discussão
Para o seu caso de exemplo, convém usar em cron()
vez de rate()
. Expressões cron em lambda requerem todos os campos e são expressas em UTC. Portanto, para executar uma função todos os dias às 17:00 (UTC), use a seguinte expressão cron:
cron(0 17 * * ? *)
Recursos adicionais
Notas
- O nome desse tipo de evento mudou de "Evento agendado" para "Eventos do CloudWatch - Agendamento" desde que esse recurso foi lançado pela primeira vez.
- Antes do lançamento desse recurso, a solução recomendada para esse problema (por "Introdução ao AWS Lambda" aos 42min 50s ) era usar o SWF para criar um cronômetro ou um cronômetro com um aplicativo externo.
- A interface do usuário do Lambda foi revisada desde a publicação da postagem do blog do evento agendado e as capturas de tela não são mais exatas. Veja minhas capturas de tela atualizadas acima a partir de 10/03/2017 para obter as revisões mais recentes.
Desde o momento desta publicação, parece ter surgido outra solução: Programar invocações recorrentes do AWS Lambda com o relógio da cidade não confiável (UTC), no qual o autor propõe a inscrição no tópico Relógio da cidade não confiável do SNS . Não usei nem SWF nem SNS, mas me parece que a solução SNS é mais simples. Aqui está um trecho do artigo
fonte
NOVA SOLUÇÃO: Trabalhos agendados Lambda
Werner Vogel anunciou hoje à noite (10/08): re: Invente que o AWS Lambda agora tem seu próprio agendador.
Veja a nota de versão do AWS Lambda em 08/10/2015 :
SOLUÇÃO ANTIGA: Agendamento com o AWS Data Pipeline
Você pode usar o AWS Data Pipeline para agendar uma tarefa com um determinado período. A ação pode ser qualquer comando quando você configura seu Pipeline com o ShellCommandActivity .
Você pode, por exemplo, executar um comando da AWS CLI para:
Você pode criar facilmente a tarefa agendada do AWS Data Pipeline diretamente no console da AWS (por exemplo, com um comando da AWS CLI):
Você também pode usar a API para definir sua programação:
Limites : o intervalo mínimo de agendamento é de 15 minutos.
Preço : cerca de US $ 1,00 por mês.
fonte
Aqui está como eu faço isso:
Crie o Lambda que:
Crie um alarme do CloudWatch para: ApproximateNumberOfMessagesVisible> 0 por 1 minuto
Agora você tem um timer com resolução de aproximadamente 15 minutos.
Em seguida, outras funções do Lambda são inscritas no Tópico do SNS e chamadas a cada 15 minutos.
fonte
Como agora é facilmente possível acionar funções lambda por HTTP (por exemplo, usando GET ou curl), uma solução simples é usar um CRON gerenciado como o easycron: https://www.easycron.com/ para ativar a função lambda em execução.
Tivemos o mesmo problema e acabamos executando um serviço cron no Google App Engine em python, pois isso permitia mais flexibilidade e complexidade no próprio trabalho do CRON.
fonte
Na página Função, Adicionar gatilho, você pode adicionar um CloudWatch Events e torná-lo como um tipo de agendamento
fonte
Você também pode agendá-lo com eventos do cloudWatch. Criar regra -> anexar destino (lambda) e configurar cron / rate em sua regra.
fonte
A maneira do console da web é bastante direta. Apenas crie uma
CloudWatch
regra para o lambda e adicione-a naTriggers
guia do lambda .Para quem precisa automatizar isso
aws cli
, podemosCriar função
Criar regras
fonte
Uma maneira simples de executar sua consulta no lambda por um intervalo de tempo específico é definir regras para sua função lambda. Para isso, após criar a função lambda, vá para cloudwatch >> rules >> schedule. e defina a expressão cron e, na seção de destino, selecione a função lambda que você deseja acionar.
fonte
Ao criar a função lambda, crie o gatilho "CloudWatch Events - Schedule"
Agora você pode usar as predefinições da AWS na expressão de agendamento como rate = 15 min ou pode usar uma expressão cron.
Para sua exigência, o Cron Schedule é "0 0 17 1/1 *? *"
fonte
O Diksha é o AWS Lambda Scheduler baseado no AWS SWF Trigger, conforme recomendado pela equipe da AWS . Pode-se agendar trabalhos usando expressões cron e também pode especificar por quanto tempo você deseja executar, quando iniciar ou quando terminar. Você pode visualizar o status e o histórico dos trabalhos agendados. A segurança é gerenciada pelas políticas da AWS.
Depois de configurar o mecanismo diksha, você pode agendar funções usando a expressão cron da seguinte maneira:
java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj "jobName | functionName | context | 0 0-59 * * * * | 10"
Neste trabalho, o trabalho será executado a cada minuto por 10 vezes. O AWS SWF acionará a função por si só.
Detalhes: https://github.com/milindparikh/diksha
Isenção de responsabilidade: eu sou colaborador do projeto.
fonte