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
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
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.
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:
{"pathParameters":{"food_id":"100"}}
food_id
, utilisez event.pathParameters.food_id
sls invoke local -f yourFunction -p test.json
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"}}'