AWS python une fonction lambda:No module named demandes
Je suis assez nouveau sur AWS et je vais avoir quelques problèmes. Voici mon code:
from __future__ import print_function
from urllib2 import Request, urlopen, URLError
import requests
import boto3
import json
def lambda_handler(event, context):
url = "https://globalcurrencies.xignite.com/xGlobalCurrencies.json/GetHistoricalRatesRange?Symbol=BTCUSD&PriceType=Mid&StartDate=01/01/2017&EndDate=10/27/2017&PeriodType=Daily&FixingTime=22:00&_token=some_token_xyz"
response = requests.get(url).json()
# print json.dumps(response, indent=4) # gives a syntax error
return response
Nom du fichier est lambda_function.py; j'ai vérifié des problèmes similaires sur stackoverflow et certains ont mentionné que je dois changer la dénomination de fichier. Mais il n'a pas aidé. Voici comment python méthode a été nommé:
Voici l'erreur que j'obtiens:
START RequestId: cf24e9be-bbef-11e7-97b4-d9b586307f3e Version: $LATEST
Unable to import module 'lambda_function': No module named requests
Et lorsque vous essayez d'imprimer, il me donne une erreur de syntaxe. Désolé pour la mise en forme. Des suggestions?
requests
n'est pas dans la bibliothèque standard. Vous aurez besoin de chercher à fournir des dépendances sur cette plate-forme; il est courant d'utiliser unrequirements.txt
fichier pour spécifier, par exemple. Regardez par exemple docs.aws.amazon.com/lambda/latest/dg/...- J'ai de l'environnement virtuel de l'installation sur ma machine. Devrais-je télécharger tout à faire
pip install -r requirements.txt
?
Vous devez vous connecter pour publier un commentaire.
demandes n'est pas une bibliothèque standard dans AWS lambda.
Donc deux façons de résoudre ce problème:
1 - Importer à partir de la Botocore bibliothèques de pile:
Ici il y a une liste de toutes les bibliothèques de l'importation dans le lambda
2- Créer un package de déploiement avec virtualenv.
C'est parce qu'il est absent de la demandes de la bibliothèque lors de l'exécution dans le lambda - il est probable que sa installées dans le monde sur votre machine locale. Si vous exécutez:
pip install requests -t .
dans le même répertoire que votre code source, il va installer les demandes de package dans le répertoire, alors vous pouvez le télécharger à lambda avec votre lambda_function.py. Vous devrez peut-être faire de même pour boto3 et json:
pip install boto3 -t .
pip install json -t .
'demandes' module n'est pas dans votre fichier zip fichier que vous essayez d'installer. vous devez mettre tous les modules dans le fichier zip par " pip install nom_du_module(telles que des demandes) -t .'
vous avez le nom de votre lambda de cette façon dans le code python:
et en lambda de la console gestionnaire:
pour votre demande d'erreur, il faut avoir le dossier de ce module sur votre .zip avant de les télécharger pour lambda.
Unable to import module 'main': No module named requests