7

Quelle est la meilleure façon d'enrouler des fonctions d'une manière qui gère un ping à partir d'une minuterie CloudWatch? Par exemple, prendre la fonction lambda ci-dessous:Comment passer des valeurs à une fonction Lambda dans CloudWatch?

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 je ping la fonction, il erreur car il n'y a pas queryStringParameters sur la demande de 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 inutile d'erreurs.

je remarquai que CloudWatch vous permet d'inclure des entrées (vraisemblablement) sont passés à une fonction Lambda:

configure input

Quelle est la façon la plus intelligente pour envelopper la fonction ci-dessus pour qu'il puisse accepter un ping? Idéalement, il 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)) 
} 

Là où je passerais une JSON qui me permet de modifier l'événement, comme:

{ "ping": true } 

Je l'ai lu dans la documentation pour les entrées, mais il est pas du tout clair pour moi ce que les différents types d'entrée signifient ou comment les utiliser ...

Répondre

5

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

Si vous utilisez le cadre serverless, au lieu de le faire dans la console AWS, vous pouvez ajouter un événement de calendrier pour votre fonction. Cela s'ajouterait à votre événement http existant. Vous pouvez ajouter le paramètre ping: true dans la section d'entrée de l'événement programmé comme celui-ci:

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

Cela va créer et activer l'événement journal CloudWatch le calendrier spécifié et envoyer le paramètre d'entrée ping dans l'objet event.

+0

Ceci est en fait une réponse à la question. Les modérateurs peuvent-ils le marquer? –