问题
Trying to make a deployment package for the service Pusher in Python on AWS lambda.
When I run simple code like this
from pusher import Pusher
def pusherTest(context, event):
mypusher = Pusher(app_id=u'***', key=u'***', secret=u'***')
mypusher.trigger('testchannel', 'testevent', {u'some': u'data'})
I'm getting this stack trace.
libssl.so.1.0.0: cannot open shared object file: No such file or directory: ImportError
Traceback (most recent call last):
File "/var/task/Lambda.py", line 3, in pusherTest
mypusher = Pusher(app_id=u'***', key=u'***', secret='***')
File "/var/task/pusher/pusher.py", line 42, in __init__
from pusher.requests import RequestsBackend
File "/var/task/pusher/requests.py", line 12, in <module>
import urllib3.contrib.pyopenssl
File "/var/task/urllib3/contrib/pyopenssl.py", line 54, in <module>
import OpenSSL.SSL
File "/var/task/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/var/task/OpenSSL/rand.py", line 12, in <module>
from OpenSSL._util import (
File "/var/task/OpenSSL/_util.py", line 6, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
File "/var/task/cryptography/hazmat/bindings/openssl/binding.py", line 15, in <module>
from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory
I believe libssl is a C library and since I don't have access to the Lambda machine to install these tys of dependencies, how could I make this work?
回答1:
Are you building the deployment package on a distro other than Amazon Linux
? Try creating the deployment package in Amazon Linux
Python Extension Modules in AWS Lambda
回答2:
I had the same problem and I had the chance to really understand what is the hint here. The follow error is clearing say to us that the library libssl.so is not there...
ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory
I would expect that it is there ... After all Amazon Linux is a linux distro and libssl should be there. But I do not know ... may be it is not directly accessible from the lambda function.
To solve the problem I added the library in the zip bundle
cd /usr/lib64
zip -u /tmp/lambda.zip libssl.so.1.0.0
I redeployed and the error was different. Eureka!
Another library was missed. The libcrypto. I did the same task and now my lambda function is working as expected
cd /usr/lib64
zip -u /tmp/lambda.zip libcrypto.so.1.0.0
回答3:
So for me the fix was to move the libraries files into the root folder like so:
The files in question were in PIL > .libs
来源:https://stackoverflow.com/questions/36468984/aws-lambda-python-libssl-c-library