J'ai essayé de déployer une Lambda dans Serverless pour exécuter un programme Cron qui l'invoque toutes les heures. Lorsqu'il est invoqué, je souhaite que l'événement à l'intérieur du Lambda soit rempli par ma propre entrée JSON plutôt que par les informations de l'événement Cron qui est l'entrée par défaut lors de son déploiement.
À l'intérieur de la console AWS, je peux manuellement entrer dans le déclencheur Cron pour Lambda et changer l'entrée de "Matched event" en "Constant (JSON text)" afin d'obtenir le résultat que je veux. Étant donné que Serverless crée cette règle lors du déploiement de Lambda, je pense qu'il devrait y avoir un moyen de modifier l'entrée via une configuration dans le fichier serverless.yml. Je n'ai pas pu trouver quoi que ce soit lors de la recherche dans les documents pour Serverless, alors maintenant je me demande si cela est possible via Serverless dans son état actuel, et si oui, comment s'y prendre.
Tout avis sera le bienvenu.
Edit: Il y avait une mise à jour qui aurait dû ajouter cette fonctionnalité, mais je n'ai toujours pas pu déployer avec un calendrier avec JSON en utilisant Serverless 1.3.0 (et j'ai également testé avec 1.2.0). Voici quelques exemples du serverless.yml que j'ai utilisé:
functions:
test:
handler: test.test
description: "test serverless Lambda"
memorySize: 128
timeout: 300
events:
- schedule:
rate: rate(10 minutes)
input:
key: value
- schedule:
rate: rate(10 minutes)
input: '{"key": "value"}'
- schedule:
rate: rate(10 minutes)
input:
key: 'value'
Quelqu'un pourrait-il commenter l'état de cette fonctionnalité dans Serverless à partir de la version 1.3.0, et si mon serverless.yml ci-dessus semble correct ou non?
Edit 2: Publier le serverless.yml de travail
functions:
test:
handler: test.test
description: "test serverless Lambda"
memorySize: 128
timeout: 300
events:
- schedule:
rate: rate(10 minutes)
enabled: true
input:
key: value
- schedule:
rate: rate(10 minutes)
input: '{"key": "value"}'
enabled: true
- schedule:
rate: rate(10 minutes)
input:
key: 'value'
enabled: true
MODIFIER VOTRE MODIFICATION: J'ai fait quelques recherches, il semble que sans serveur désactivera automatiquement le calendrier s'il ne s'agit pas d'une chaîne. Ce qui signifie que tout votre événement est - schedule: rate(10 minutes)
il sera activé. Mais si vous avez d'autres propriétés, vous DEVEZ l'activer car il sera désactivé par défaut.
Ainsi, votre .yml actuel devrait ressembler à ceci:
functions: test:
handler: test.test
description: "test serverless Lambda"
memorySize: 128
timeout: 300
events:
- schedule:
rate: rate(10 minutes)
enabled: true
input:
key: value
- schedule:
rate: rate(10 minutes)
input: '{"key": "value"}'
enabled: true
- schedule:
rate: rate(10 minutes)
input:
key: 'value'
enabled: true
Vous pouvez utiliser les mêmes input
et inputPath
dans votre fichier serverless.yml comme vous le feriez avec la règle d'événement cloudwatch. La seule différence avec les règles de cloudwath est que vous pouvez réellement passer un objet et sans serveur le stringifiera automatiquement pour vous.
Exemple:
functions:
crawl:
handler: crawl
events:
- schedule:
rate: rate(1 hours)
input:
key1: value1
key2: value2
Ce sera égal à la règle d'événement cloudformation avec input:"{'key1':'value1','key2':'value2'}"
passant ainsi json au lieu de l'événement correspondant.
J'ai remarqué tout à l'heure que la question avait été posée le 2 novembre. À cette époque, il n'était pas possible de le faire, mais il a été mis en œuvre peu de temps après que la question a été posée. https://github.com/serverless/serverless/pull/2567