74 votes

Ne peut pas utiliser Demandes-Module sur AWS Lambda

J'ai besoin de faire un repos d'appel à l'intérieur d'un script python, qui s'exécute une fois par jour. Je ne peux pas le pack de la "demande" paquet dans mon python-package à l'aide de l'AWS Lambda. J'obtiens l'erreur: "Impossible d'importer le module 'lambda_function': No module named lambda_function"

Je me suis cassé vers le bas à la hello_world script prédéfini. Je peux emballer dans un zip et de le télécharger. Tout fonctionne. Dès que j'ai mis "les demandes d'importation" dans le fichier, j'obtiens cette erreur.

Voici ce que j'ai déjà fait:

  1. Les autorisations de la fermeture éclair et le dossier du projet (y compris les sous-dossiers) sont mis à " chmod 777`. Si bien que les autorisations ne devrait pas être un problème.
  2. Le script lui-même est dans le dossier racine. Lorsque vous ouvrez le fichier zip, vous avez directement le voir.
  3. J'ai installé les demandes de paquet dans la racine du dossier du projet à l'aide de `sudo pip install demande -t PATH_TO_ROOT_FOLDER`

La désignation de tout ce qui ressemble à ceci:

  • fichier zip: lambda_function.zip
  • py-fichier: lambda_function.py
  • méthode de gestionnaire d': lambda_handler(événement, contexte)
  • gestionnaire de définition dans le "webconfig: lambda_function.lambda_handler

Le fichier que je veux courir à la fin ressemble à ceci:

import requests
import json


def lambda_handler(event, context):
    url = 'xxx.elasticbeanstalk.com/users/login'
    headers = {"content-type": "application/json", "Authorization": "Basic Zxxxxxxxxx3NjxxZxxxxzcw==" }
    response = requests.put(url, headers=headers, verify=False)
    return 'hello lambda_handler'

Je suis content pour TOUTE sorte d'aide. J'ai déjà utilisé plusieurs heures sur cette question.

210voto

Sining Liu Points 1173

Pour utiliser les demandes de module, vous pouvez simplement importer requests de botocore.vendored. Par exemple:

from botocore.vendored import requests

def lambda_handler(event, context):
   response = requests.get("https://example.com/")
   print response.json()

vous pouvez voir ce résumé pour en savoir plus, des modules qui peuvent être importés directement dans AWS lambda

25voto

TrudleR Points 430

J'ai finalement résolu le problème: La structure de mon fichier zip a été brisé. Il est important que le script python et les paniers dépendances (comme des dossiers) sont à la racine du fichier zip. Cela a résolu mon problème.

C'est un peu déprimant si vous trouvez que ces facile erreurs après des heures à essayer et à l'échec.

22voto

Je crois que vous avez lambda_function.py sur le Lambda de la console. Vous devez d'abord créer la fonction Lambda package de déploiement, puis utiliser la console pour envoyer le paquet.

  • Vous créez un répertoire, par exemple project-dir sur votre système (localement)
  • créer lambda_function.py en project-dir, copiez le contenu de lambda_function.py de lambda de la console et de le coller dans project-dir/lambda_function.py
  • pip install requests -t /path/to/project-dir
  • Zip le contenu de l' project-dir annuaire, ce qui est votre package de déploiement (Zip le contenu du répertoire, et non pas le répertoire)

Aller pour le Lambda de la console, sélectionnez télécharger le fichier zip dans le code de type d'entrée et de télécharger votre package de déploiement. Les demandes d'importation devrait fonctionner sans erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X