Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS Lambda Python libssl C Library

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?

like image 422
jamesmpw Avatar asked Apr 07 '16 07:04

jamesmpw


3 Answers

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
like image 114
Alex Avatar answered Oct 13 '22 14:10

Alex


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

like image 41
helloV Avatar answered Oct 13 '22 14:10

helloV


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

like image 33
Jack Avatar answered Oct 13 '22 16:10

Jack