AWS Lambda module d'importation d'erreur en python
Je suis entrain de créer un AWS Lambda python package de déploiement. J'utilise une dépendance demandes . J'ai installé la dépendance externe à l'aide de l'AWS documentation http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html. Ci-dessous mon code python.
import requests
print('Loading function')
s3 = boto3.client('s3')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).decode('utf8')
try:
response = s3.get_object(Bucket=bucket, Key=key)
s3.download_file(bucket,key, '/tmp/data.txt')
lines = [line.rstrip('\n') for line in open('/tmp/data.txt')]
for line in lines:
col=line.split(',')
print(col[5],col[6])
print("CONTENT TYPE: " + response['ContentType'])
return response['ContentType']
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
raise e
Créé le Zip sur le contenu du projet-dir annuaire et téléchargées sur le lambda(Zip le contenu du répertoire, et non pas le répertoire). Quand je suis d'exécuter la fonction, je suis mentionnés ci-dessous d'erreur.
START RequestId: 9e64e2c7-d0c3-11e5-b34e-75c7fb49d058 Version: $LATEST
**Unable to import module 'lambda_function': No module named lambda_function**
END RequestId: 9e64e2c7-d0c3-11e5-b34e-75c7fb49d058
REPORT RequestId: 9e64e2c7-d0c3-11e5-b34e-75c7fb49d058 Duration: 19.63 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 9 MB
De bien vouloir m'aider à chercher l'erreur.
- Est-il ton code complet? Par l'erreur, il semble que quelque part quelque chose aurait envie de
import lambda_function
qui n'est pas trouvé. Vous désirez peut-êtrefrom future import lambda_function
? Ou tout simplement pip install lambda_function sur la ligne de cmd. - Suis en cours d'exécution de ce python codein plateforme AWS . Je ne peux pas utiliser le pip. partout dans mon code am à l'aide de lambda_function. SI j'ai copier coller le même code dans la console AWS il fonctionnera
- Voir le dernier commentaire sur ce thread — peut-être s'applique à vous?
- J'ai essayé aussi. En fait suis la compression de contenu et non pas le répertoire!!
- Ma conjecture est que "gestionnaire" option dans votre fonction est incorrect. Vérifiez que votre nom de fichier appelé "lambda_function.py" et méthode du gestionnaire est "lambda_handler"
- J'ai passé des heures, enfin, est venu de savoir que vous avez pour compresser le contenu de votre répertoire ( y compris lambda_function.py ) et non pas le répertoire.
- Mon code est juste en lambda comme code, non pas comme un fichier.
Vous devez vous connecter pour publier un commentaire.
Erreur était due pour le nom de fichier de la fonction lambda. Lors de la création de la fonction lambda il vous sera demander Lambda fonction de gestionnaire. Vous devez citer en tant que votre Python_File_Name.Method_Name. Dans ce scénario, j'ai nommé il lambda.lambda_handler (lambda.py est le nom de fichier).
Veuillez trouver ci-dessous la capture d'écran.
Si vous téléchargez un fichier zip. Assurez-vous que vous êtes compresser le contenu du répertoire et non pas le répertoire lui-même.
Une autre source de ce problème est que les autorisations sur le fichier zippé. Il DOIT être au moins à l'échelle mondiale lisible. (min
chmod 444
)J'ai couru les opérations suivantes sur le fichier python avant de les compresser et il a bien fonctionné.
0600
qui, comme vous le mentionnez n'est pas assez. En outre, le système intégré Lambda éditeur de code source (sur la page web d'Amazon) sera heureux de lire le fichier sans avertissement de problèmes de permissions.J'ai trouvé Nithin réponse très utile. Ici est un pied-à travers:
De recherche de ces valeurs:
nom utilisé dans l'AWS exemples est "lambda_handler" à la recherche
comme "def lambda_handler(événement, contexte)". Dans ce cas, la valeur est
"lambda_handler"
la fonction (comme illustré dans Nithin la capture d'écran). Mon nom par défaut est
"lambda_function.lambda_handler".
Avec ces valeurs, vous devez renommer le gestionnaire (comme illustré dans la capture d'écran) pour "refroidir.lambda_handler". C'est une façon de se débarrasser de la "Impossible d'importer le module 'lambda_function'" errorMessage. Si vous renommez le gestionnaire dans votre script python "sup" alors vous devrez renommer le gestionnaire dans le lambda tableau de bord pour "refroidir.sup"
Il ya tellement de nombreux pièges lors de la création de packages de déploiement pour AWS Lambda (pour Python). J'ai passé des heures et des heures sur les sessions de débogage jusqu'à ce que j'ai trouvé une formule qui manque rarement.
J'ai créé un script qui automatise l'ensemble du processus et, par conséquent, rend moins sujettes à erreur. J'ai également écrit tutoriel qui explique comment tout cela fonctionne. Vous pouvez le vérifier:
Sans Tracas Python Lambda De Déploiement [Tutoriel + Script]
J'ai trouvé sur ce chemin difficile, après avoir essayé toutes les solutions ci-dessus. Si vous êtes en utilisant des sous-répertoires dans le fichier zip, assurez-vous d'inclure les
__init__.py
fichier dans chacun des sous-répertoires et qui a fonctionné pour moi.J'ai eu l'erreur de trop.
Que mon fichier zip inclure le code du dossier parent. Quand je
unzip
et inspecter le fichier zip, lelambda_function
fichier est sous dossier parent./lambda
.Utiliser le
zip
de commande, la correction de l'erreur:J'ai rencontré le même problème, c'était un exercice dans le cadre d'un tutoriel sur la lynda.com si je ne me trompe pas.
L'erreur que j'ai faite n'était pas la sélection de l'exécution Python 3.6 qui est une option dans le lamda fonction de la console.
dans lambda_handler le format doit être lambda_filename.lambda_functionName
supposons que si vous souhaitez exécuter lambda_handler fonction sna si c'est dans lambda_fuction.py ensuite, votre gestionnaire de formiate est "lambda_function.lambda_handler" . une autre raison pour obtenir de l'erreur du module de dépendances .
votre lambda_fuction.py doit être dans le répertoire racine du zip.
Pas nécessaire de le faire désordre.
utiliser python-lambda
https://github.com/nficano/python-lambda
avec une seule commande
pylambda deploy
il va déployer automatiquement votre fonction
Vous avez besoin de zip à toutes les exigences, l'utilisation de ce script
utiliser avec:
@nithin,
AWS publié
layers
concept à l'intérieur deLambda
fonctions. Vous pouvez créer votre couche, et là, vous pouvez télécharger autant que les bibliothèques et alors vous pouvez connecter le calque avec les lambda fonctions.Pour plus de détails: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html