web-dev-qa-db-fra.com

Comment passer des valeurs à une fonction Lambda dans CloudWatch?

Quelle est la meilleure façon d'encapsuler les fonctions d'une manière qui gère un ping à partir d'une minuterie CloudWatch? Par exemple, prenez la fonction lambda ci-dessous:

export const fn = (event, context, callback) => {
  const { year, make, model, } = event.queryStringParameters

  return otherFn({ year, make, model, })
    .then(res => response(callback, res))
    .catch(err => console.log(err))
}

Si j'effectue une commande ping sur la fonction, cela entraînera une erreur car il n'y a aucun queryStringParameters sur la demande CloudWatch. Techniquement, cela fera toujours le travail de garder la fonction Lambda au chaud (ce qui est mon objectif), mais je ne veux pas avoir une liste d'erreurs inutilement longue.

J'ai remarqué que CloudWatch vous permet d'inclure des entrées qui (vraisemblablement) sont passées à une fonction Lambda:

configure input

Quelle est la façon la plus intelligente d'envelopper la fonction ci-dessus afin qu'elle puisse accepter un ping? Idéalement, cela ressemblerait à ceci:

export const fn = (event, context, callback) => {
  if (event.ping) return ping(callback) // the ping function is an import to stay DRY
  const { year, make, model, } = event.queryStringParameters

  return otherFn({ year, make, model, })
    .then(res => response(callback, res))
    .catch(err => console.log(err))
}

Où je passerais du JSON qui me permet de modifier l'événement, comme:

{ "ping": true }

J'ai lu la documentation des entrées, mais je ne sais pas du tout ce que signifient les différents types d'entrée ou comment les utiliser ...

15
samcorcos

Si vous sélectionnez l'option de saisie Constante (texte JSON), une zone de saisie doit apparaître juste en dessous. Vous devez entrer le json {"ping": true}. Votre fonction obtiendra le json en tant qu'objet event et vous pourrez accéder à event.ping tout comme votre code.

Si vous utilisez la structure sans serveur, au lieu de le faire dans la console AWS, vous pouvez ajouter un événement de planification pour votre fonction. Ce serait en plus de votre événement http existant. Vous pouvez ajouter le ping: true paramètre sous la section d'entrée de l'événement planifié comme ceci:

scheduledFunction:
  handler: index.handler
  events:
    - schedule:
        rate: rate(1 minute)
        enabled: true
        input:
          ping: true

Cela créera et activera l'événement de journal cloudwatch avec la planification spécifiée et enverra le paramètre d'entrée ping dans l'objet event.

22
user818510