2017-12-05 1 views
0

Ich erstelle eine einfache AWS Lambda-Funktion mit M2Crypto-Bibliothek. Ich habe die Schritte zum Erstellen des Bereitstellungspakets von here ausgeführt. Die Lambda-Funktion funktioniert perfekt auf einer EC2 Linux-Instanz (AMI).Skript funktioniert auf AWS EC2, aber nicht auf AWS Lambda nach dem Zippen

Dies ist meine Funktion Definition:

CloudOAuth.py

from M2Crypto import BIO, RSA, EVP 
def verify(event, context): 
    pem = "-----BEGIN PUBLIC KEY-----\n{0}\n-----END PUBLIC KEY-----".format("hello") 
    bio = BIO.MemoryBuffer(str.encode(pem)) 
    print(bio) 
    return 

Deployment Package Struktur:

Lambda Deployment Package skeleton

Wenn ich das Lambda laufen lasse, erhalte ich die folgende Frage und ich versuchte auch einschließlich libcrypto.so.10 von/lib64-Verzeichnis, aber nicht geholfen.

Ausgabe, wenn Lambda läuft

/var/task/M2Crypto/_m2crypto.so: Symbol sk_deep_copy, Version libcrypto.so.10 nicht in der Datei libcrypto.so.10 mit Link Zeit definiert reference`

Python: 2.7 
M2Crypto: 0.27.0 
+0

Könnten Sie bitte meine Antwort markieren als angenommen, wenn es so ist, bitte? – mcepl

+0

Sicher, danke! und ich fügte etwas mehr Detail für einen Anfänger wie mich hinzu. – imechemi

+0

Ja, ich habe keine Ahnung von EC2, also ist es sehr hilfreich. Vielen Dank. – mcepl

Antwort

0

Ich möchte nur einige weitere Details zu @ mcepl's Antwort hinzufügen. Das Wichtigste ist, dass die OpenSSL-Version von AWS Lambda und die Umgebung (in meinem Fall ec2), in der Sie Ihre M2Crypto-Bibliothek erstellen, übereinstimmen sollten.

OpenSSL-Version auf Lambda Um zu überprüfen, drucken in Ihrem Handler:

print(ssl.OPENSSL_VERSION) 

OpenSSL-Version auf Ihrem Build-Umgebung zu überprüfen, verwenden:

$ openssl version 

Sobald sie übereinstimmen, funktioniert es.

Zögern Sie nicht, OpenSSL auf Ihre Build-Umgebung herunterzustufen oder zu aktualisieren, damit es der Lambda-Umgebung entspricht. Ich musste meine openssl auf ec2 herunterstufen, um der Laufzeitumgebung von Lambda zu entsprechen.

sudo yum -y downgrade openssl-devel-1.0.1k openssl-1.0.1k 

Hoffe, dass es jemand helfen versuchen m2crypto zu verwenden :)