web-dev-qa-db-fra.com

Comment tester localement les fonctions aws lambda

J'ai un backend d'application mobile développé avec node.js express. Je l'ai essayé pour le déployer en tant que service lambda. Pour cela, j'ai créé un projet Framework sans serveur ( https://github.com/serverless ). Auparavant, j'ai testé l'application mobile localement en démarrant une application backend express. Maintenant, je ne trouve pas de méthode pour tester mon application mobile localement sans backend local. La commande jaws run Ne s'exécute qu'une fois que je l'ai appelée.

Existe-t-il une méthode pour démarrer la fonction lambda en tant que service Web? Ou existe-t-il une alternative à Serverless Framework?

24
Supun Induwara

Il ne semble pas qu'il y ait moyen de le faire en ce moment, mais la version 1.4.0 est sur le point d'être publiée et, entre autres choses, elle devrait inclure une nouvelle commande "jaws serve" qui devrait résoudre votre problème.

Voici le PR: https://github.com/jaws-framework/JAWS/pull/269

MISE À JOUR: vous pouvez maintenant utiliser le nouveau plugin serverless-serve pour cela.

MISE À JOUR 2: serverless-serve n'a pas été mis à jour depuis un certain temps, il semble que serverless-offline est une bien meilleure option maintenant pour émuler les fonctions Lambda.

16
Santiag00

Je ne sais pas si cette question est toujours pertinente ou non, mais j'utilise DEEP Framework pour tester le code localement et/ou le déployer sur AWS Lambda. Regarde ça:

npm install deepify -g

deepify run-lambda --help

  [email protected] - Run Lambda function locally 

  Usage example: deepify run-lambda path/to/the/lambda -e='{"Name":"John Doe"}' 

  Arguments:  
    path: The path to the Lambda (directory of handler itself) 

  Options:  
    --event|-e: JSON string used as the Lambda payload 
    --skip-frontend-build|-f: Skip picking up _build path from the microservices Frontend 
    --db-server|-l: Local DynamoDB server implementation (ex. LocalDynamo, Dynalite) 
    --version|-v: Prints command version 
    --help|-h: Prints command help 

Divulgation: je suis l'un des contributeurs à ce cadre

3
user5880747

Le plugin Bespoken sevrerless rend votre Lambdas local accessible de l'extérieur. Il est très utile à la fois pour les tests locaux avec Postman ainsi que pour les services basés sur Webhook (comme Alexa, Slack, Twilio, etc.).

L'architecture est montrée ici: enter image description here

Pour l'utiliser, il vous suffit d'installer le plugin, puis d'exécuter:

sls proxy

Vous pouvez ensuite commencer à envoyer des demandes à votre service localement:

enter image description here

Nous pensons que c'est un outil très utile pour tester avec sans serveur.

2
John Kelvie

Vous pouvez maintenant utiliser lambda-local .

Installez-le comme ceci:

Sudo -H npm install -g lambda-local

Ajoutez vos paramètres en tant qu'objet JSON à un fichier, dans cet exemple event.json, et appelez le index.js fichier comme celui-ci:

lambda-local -l index.js -h handler -e event.json
2
Nicolay77

Cela peut être trop tard .. Mais maintenant, vous pouvez essayer Serverless-Offline ( https://www.npmjs.com/package/serverless-offline ) fonctionne comme un charme

C'est aussi la page github pour cela ( https://github.com/dherault/serverless-offline )

1
Yohan

Comme 1.4 n'est pas encore sorti ...

La semaine dernière, j'avais besoin exactement de la même chose. J'ai donc créé un petit serveur factice qui peut être exécuté localement: https://github.com/martinlindenberg/JawsLocalServer

  • Tous les en-têtes et paramètres ont été copiés dans l'objet événement transmis au gestionnaire.
  • L'objet de contexte est un objet simple qui transmet les données à l'objet de réponse
1
M. Lindenberg

Le framework sans serveur fournit désormais un moyen d'appeler des fonctions localement

Avec cela, vous pouvez créer des requêtes dans des fichiers json comme

{
  "body": "{\"hello\":\"world\"}",
  "pathParameters": {
    "id": "foo"
  },
  "queryStringParameters": {
    "bar": "42"
  }
  "requestContext": {
    "identity": {
      "cognitoIdentityId": "cognito-id"
    }
  }
}

Si votre fonction est décrite dans serverless.yml fichier, vous pouvez ensuite l'invoquer localement avec

serverless invoke local --function yourFunction --path path/to/your/mock.json
1
7hibault

Python

Un exemple lambda_function.py:

def lambda_handler(*args, **kwargs):
    return 'hello'

Exemple d'appel d'une fonction lambda locale:

pip install python-lambda-local
echo '{}' >> event.json
python-lambda-local -t 15 -f lambda_handler lambda_function.py event.json
0
jmunsch

À la date de cet article, vous pouvez exécuter des fonctions localement en faisant sls function run [name-of-function]. Tout json utilisé dans le event.json De votre fonction sera transmis à votre fonction.

Pour tester vos points de terminaison, vous pouvez également utiliser Serverless Offline qui est un fork du projet serverless-serve.

0
mrBorna