web-dev-qa-db-fra.com

Comment passer des entrées json à un Lambda planifié Cron déployé dans Serverless à l'aide d'un événement?

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
25
Raiju

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

21
Erndob