Je dois effectuer un appel repos dans un script python qui s'exécute une fois par jour. Je ne peux pas emballer le paquet "demandes" dans mon paquet python à l'aide de AWS Lambdas. Je reçois l'erreur: "Impossible d'importer le module 'fonction_lambda': aucun module nommé fonction_lambda"
Je l'ai décomposé en script prédéfini hello_world. Je peux l'emballer dans un zip et le télécharger. Tout fonctionne. Dès que je mets des "demandes d'importation" dans le fichier, j'obtiens cette erreur.
Voici ce que j'ai déjà fait:
La dénomination de tout ressemble à ceci:
Le fichier que je veux exécuter à 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 de TOUT type d'aide. J'ai déjà utilisé plusieurs heures sur cette question.
J'ai finalement résolu le problème: la structure de mon fichier Zip était cassée. Il est important que le script python et les dépendances compressées (sous forme de dossiers) se trouvent à la racine du fichier Zip. Cela a résolu mon problème.
C'est un peu déprimant si vous trouvez des erreurs aussi faciles après des heures d'essais et d'échecs.
Pour utiliser le module de requêtes, 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 this Gist pour en savoir plus sur les modules pouvant être importés directement dans AWS lambda
Je crois que tu as lambda_function.py
sur la console Lambda. Vous devez d'abord créer le package de déploiement de la fonction Lambda, puis utiliser la console pour le télécharger.
project-dir
sur votre système (localement)lambda_function.py
dans project-dir
, copiez le contenu de lambda_function.py
depuis la console lambda et collez-le dans project-dir/lambda_function.py
pip install requests -t /path/to/project-dir
project-dir
répertoire, qui est votre package de déploiement (compressez le contenu du répertoire, pas le répertoire)Accédez à la console Lambda, sélectionnez télécharger le fichier Zip dans le type d'entrée de code et téléchargez votre package de déploiement. Les demandes d'importation doivent fonctionner sans erreur.
Avec cette commande télécharger le package de dossiers
pip install requests -t .
Exécutez cette commande sur votre ordinateur local, puis décompressez votre répertoire de travail, puis chargez-le sur aws.