web-dev-qa-db-fra.com

Comment passer des paramètres à invoquer sans serveur local

Je travaille sur un projet aws serverless et dois tester les fonctions lambda localement.
J'utilise serverless invoke local -f {function_name} commande pour tester les appels d'API qui ne demandent aucun paramètre de chemin ou de requête.
Ma question est la suivante: comment utiliser cette commande pour transmettre un chemin ou un paramètre de requête à la fonction?

Exemple de description sans serveur

getFoodDetails:
    handler: handler.getFoodDetails
    events:
      - http:
          method: get
          path: /foods/{food_id}
          cors: true
          request:
            parameters:
              paths:
                food_id: true
17
Lasitha Yapa

Chaîne de données

Comme dit, vous pouvez utiliser l'option --data Pour transmettre une donnée de chaîne en tant qu'événement à votre fonction .

serverless invoke local -f {function_name} --data '{ "queryStringParameters": {"id":"P50WXIl6PUlonrSH"}}'

Fichier de données

Ce que vous pouvez également faire est de passer un --path À un fichier json contenant des données telles que event, et définir dans le "fichier d'événement" les données souhaitées.

serverless invoke --function {function_name} --path event_mock.json

Vous pouvez en quelque sorte renvoyer l'événement à partir d'un appel et l'enregistrer dans un fichier JSON ou en récupérer un auprès d'Amazon. Ils fournissent quelques exemples: https://docs.aws.Amazon.com/lambda/latest/dg/eventsources.html

N'oubliez pas que si vous passez à la fois --path Et --data, Les données incluses dans le fichier --path Écraseront celles que vous avez transmises. l'indicateur --data.

Documentation: https://serverless.com/framework/docs/providers/aws/cli-reference/invoke#invoke-local

30
maxrodrigo

Utilisation --data and pass correspond à tout format de données que vous souhaitez envoyer au lambda local.

Exemple de données de chaîne:

invocation sans serveur --function functionName --stage dev --region us-east-1 --data "hello world"

Exemple de données JSON:

invocation sans serveur --function functionName --stage dev --region us-east-1 --data '{"property1": "value"}'

Données JSON du fichier:

invocation sans serveur --function functionName --stage dev --region us-east-1 --path lib/data.json

Une documentation complète est accessible à partir de ici

J'espère que ça aide.

5
Kannaiyan

J'ai essayé les réponses avec l'attribut --data Mais ni fonctionne.
En fait, le problème est que le --data Transmettra une valeur de chaîne au framework. Donc, si vous écrivez dans votre fichier javascript: console.log(typeof(event));, vous obtiendrez String au lieu de Object. Ce qui signifie frameworkless server ne transforme pas l'entrée en un objet JSON correctement. C'est pourquoi vous avez xx une erreur non définie .

Ma solution consiste à utiliser l'attribut -p (Ou --path). Dans votre exemple, procédez comme suit:

  1. créez un fichier .json à l’emplacement actuel de votre console. par exemple: test.json
  2. dans le fichier json, écrivez: {"pathParameters":{"food_id":"100"}}
  3. dans le fichier js, pour obtenir le food_id, utilisez event.pathParameters.food_id
  4. exécuter la commande: sls invoke local -f yourFunction -p test.json
2
Nechadil

Pour référence future. Votre cas aurait été résolu comme ça. Je viens de le comprendre grâce à Kannaiyans JSON Example.

sls invoke local -f getFoodDetails --data '{ "queryStringParameters": {"food_id":"123"}}'
1
d0utone