7

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?

helloV
  • 42,534
  • 4
  • 100
  • 125
jamesmpw
  • 425
  • 3
  • 15
  • On what Linux distro are you building the deployment package? – helloV Apr 07 '16 at 12:04
  • Hi @jamesmpw, Did you use Pusher in lambda? I installed pusher in the amazon-linux, but I still have this problem: `"errorType": "ImportError", "errorMessage": "No module named cryptography.hazmat.bindings.openssl.binding"`, Did you have this problem before ? – José Castro Sep 12 '16 at 21:48
  • Hmm I kind of remember that but I can't recall what I did to fix it. are you using virtualenv? – jamesmpw Sep 12 '16 at 21:50
  • Yes, for install all reqs, even I install cryptography, but still fail – José Castro Sep 13 '16 at 15:42

3 Answers3

7

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
Alex
  • 2,084
  • 1
  • 21
  • 20
  • Thanks, this is what I was looking for. Got my Lambda running! – Dan Apr 20 '17 at 19:46
  • This is brilliant! As a footnote: I could not locate libssl.so.1.0.0 in miniconda3/envs/xxx/lib/. But i found it in /home/ubuntu/miniconda3/lib/ – human Dec 20 '17 at 06:12
3

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

Rob Davis
  • 1,207
  • 1
  • 10
  • 19
helloV
  • 42,534
  • 4
  • 100
  • 125
  • Yah I am building the package on my vagrant box. Wow very interesting. Ok let me try that. Thank you. – jamesmpw Apr 07 '16 at 14:06
  • Wow that did it. So awesome. Month long headache there. Just couldn't get it right between Import Errors and everything else. Thank you so much. Could you explain why I can't create the packages using virtualenv on my vagrant box? Or is it that I could but I would need to install libssl? – jamesmpw Apr 07 '16 at 21:47
  • This is not an answer, this is a suggestion of an unexplained magical trick. – fiatjaf Jun 04 '16 at 14:47
  • @fiatjaf what is so magical about it? You build the package for the target platform. Nothing magical. – helloV Jun 07 '16 at 22:16
  • I think you should say that in the answer. – fiatjaf Jun 07 '16 at 23:31
  • No good to park part of the answer on an external resource when said resource goes down. – thoroc Mar 04 '21 at 11:18
1

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

enter image description here

Jack
  • 2,277
  • 6
  • 41
  • 59