2016-04-18 6 views
1

AWS Erfolgreich erstellt die Lambda-Funktion beim Hochladen der ZIP-Datei. Aber es gibt diesen Fehler, wenn ich es ausprobiere.Fehler beim Bereitstellen des Python-Pakets in AWS Lambda

{ 
    "errorMessage": "Unable to import module 'amazonSNS'" 
} 

Im Folgenden sind die Inhalte der ZIP-Datei, die ich erstellt habe. Ich habe versucht, den Namen der Zip-Datei zu "AmazonSNS" ​​zu ändern, um die amazonSNS.py Datei, aber keine Hilfe, das gleiche Problem.

enter image description here

Der Lambda-Handler in der Konfiguration der Lambda-Funktion auf „amazonSNS.handler“, wo amazonSNS der Dateiname und Handler ist der Name der Funktion, die aufgerufen werden muss, da sie in die angewiesene haben Dokumentation.

Hier sind die Inhalte der Python-Datei

import boto3 
import MySQLdb 

client = boto3.client("sns") 
rds = boto3.client("rds") 

def handler(event, context): 
    conn = MySQLdb.connect("host", "username", "password", "database") 
    cur = conn.cursor(MySQLdb.cursors.DictCursor) 
    query = "select * from login.login limit 10" 
    cur.execute(query) 
    print cur.fetchall() 
    print conn 

Was hier das Problem sein könnte? Hier

ist die Protokollausgabe

START RequestId: 76a61551-052a-11e6-b466-8fa0769ac309 Version: $LATEST Unable to import module 'amazonSNS': No module named _mysql

END RequestId: 76a61551-052a-11e6-b466-8fa0769ac309 REPORT RequestId: 76a61551-052a-11e6-b466-8fa0769ac309 Duration: 0.33 ms Billed Duration: 100 ms

UPDATE

Ich habe noch ein paar Dateien von „site-Paket“ Ordner, dachte ich Teil des MySQLdb Paket war, sind hier die aktuelle Inhalt der Zip-Datei.

enter image description here

Und danach das neue Protokoll des Fehlers ist.

START RequestId: c0715d9a-0531-11e6-9409-a3b194fd4afd Version: $LATEST Unable to import module 'amazonSNS': libmysqlclient.so.18: cannot open shared object file: No such file or directory

END RequestId: c0715d9a-0531-11e6-9409-a3b194fd4afd REPORT RequestId: c0715d9a-0531-11e6-9409-a3b194fd4afd Duration: 0.35 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 22 MB

Antwort

0

Wie haben Sie MySQLdb installiert? http://mysql-python.sourceforge.net/FAQ.html sagt:

ImportError: No module named _mysql If you see this, it's likely you did some wrong when installing MySQLdb; re-read (or read) README. _mysql is the low-level C module that interfaces with the MySQL client library.

installieren MySQLdb mit pip wenn Sie nicht bereits getan haben.

+0

kopiert Ja, ich installiert MySQLdb verwendet 'pip install MySQL-python'. Es gab eine weitere Abhängigkeit, die ich auf meinem Ubuntu-Rechner mit 'sudo apt-get install libmysqlclient-dev' installieren musste, nach der MySQLdb erfolgreich installiert wurde. Denkst du, dass die Abhängigkeit hier ein Problem sein könnte? Wenn ja, dann irgendeine Idee, wie man es löst? –

+0

Haben Sie versucht, eine andere Bibliothek wie https://github.com/PyMySQL/PyMySQL zu verwenden? – cjwfuller

+0

Nein, weil dies (MySQLdb) am beliebtesten und am schnellsten zu sein scheint. Aber lass mich eine andere Bibliothek ausprobieren. –

0

Ich konnte MySQL-python nicht kompilieren, damit es in Lambda funktioniert. Stattdessen wechselte ich zu pymysql. Ich bin mir nicht sicher über die Leistung, aber zumindest funktioniert das.

P.S. Ich frage mich, warum es keine offiziellen Empfehlungen zum vorgeschlagenen MySQL-Treiber auf Amazon gibt. Zumindest habe ich es nicht gefunden.

0

Ich hatte dieses Problem bei der Verwendung von mysqlclient (die MySQLd-Fork, die auf Python3 funktioniert).

Da ich Zappa für eine einfache Bereitstellung verwenden, war die Lösung einfach: Schalten Sie einfach auf den ursprünglichen MYSQLD Paket (die nicht Python unterstützt 3, obwohl): pip install mysql-python Zappa kommt mit einem vorkompilierte version davon.

0

Um dieses Problem zu lösen: Ich suchte nach libmysqlclient.so.20 (die Versionsnummer am Ende unterscheiden)

find /. -name "libmysqlclient.so.20" 

Mein ouput

wurde
/./usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 

ich dann die Datei in das Root-Verzeichnis mein Paket

cp /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 <your package path>