web-dev-qa-db-fra.com

Appeler la fonction AWS Lambda une seule fois, à une seule heure future spécifiée

Je veux pouvoir définir une heure pour invoquer une fonction AWS Lambda, puis faire invoquer cette fonction à ce moment-là et seulement à ce moment-là. Par exemple, je veux que ma fonction Lambda s'exécute à 21h00 le 19 décembre 2017. Je ne veux pas qu'elle se répète, je ne veux pas qu'elle invoque maintenant, juste à 21h00 le 19.

Je comprends que CloudWatch fournit des événements planifiés, et je pensais que lorsqu'un moment pour planifier ce rappel est entré, un événement planifié CloudWatch est créé pour se déclencher dans ce laps de temps à partir de maintenant (comme si vous le planifiez à 20h22). pour s'exécuter à 21 h, ce sera 38 minutes), puis il appelle la fonction Lambda à 21 h qui supprime ensuite l'événement planifié CloudWatch. Mon problème avec cela est que lorsqu'un événement planifié CloudWatch est créé, il s'exécute immédiatement, puis à l'intervalle spécifié.

Toute autre idée serait appréciée, car je ne vois pas d'autre solution. Merci d'avance!

13
Ethan Harlig

Vous pouvez planifier un événement lambda à l'aide de la syntaxe suivante:

cron(Minutes Hours Day-of-month Month Day-of-week Year)

Remarque: Tous les champs sont obligatoires et le fuseau horaire est UTC uniquement

Veuillez consulter ceci Documentation AWS pour plus de détails.

Merci

12
Kush Vyas

L'appel d'une fonction lambda via des événements est une option d'appel asynchrone. En utilisant CloudWatchEvent pour déclencher la fonction Lambda, nous pouvons utiliser le travail cron, mais nous sommes toujours confrontés à des problèmes car la fonction Lambda est déclenchée plusieurs fois pour le même calendrier cron.PFB Link: https://cloudonaut.io/your-lambda-function -peut-exécuter-deux-fois-avec-lui /

Mais cela nécessite que Dynamo DB soit implémenté dans votre compte, puis rende votre fonction Lambda idempotente.

0
Gaurav Singh

Vous pouvez utiliser la fonction DynamoDB TTL pour l'implémenter facilement, procédez simplement comme suit:

1- Placez l'élément avec TTL, l'heure exacte à laquelle vous souhaitez exécuter ou appeler une fonction lambda.

2- Configurer DynamoDB Streams pour déclencher une fonction lambda sur l'événement remove de l'élément.

Une fois que l'élément/l'enregistrement est sur le point d'expirer, votre lambda sera invoqué. vous n'avez rien à supprimer ou à nettoyer car l'élément dans dynamodb est déjà parti.

REMARQUE: Cependant, l'approche est facile à mettre en œuvre et évolue très bien, mais il y a une précaution à mentionner; en utilisant DynamoDB TTL en tant que mécanisme d'ordonnancement ne peut garantir la précision exacte de l'heure car il peut y avoir un retard. Les tâches planifiées sont exécutées quelques minutes en arrière.

0
Muhammad Soliman