Python Pusher AWS Lambda

2020-05-05 18:13发布

问题:

Using AWS Lambda to send push notifications to Pusher app in Python. When I install Pusher and all its dependencies to a directory and zip up to Lambda I run a simple test and get this error.

No module named ndg.httpsclient.ssl_peer_verification

Here is the code I'm trying to run.

from pusher import Pusher

pusher = Pusher(app_id=u'id', key=u'key', secret=u'secret')
def createPitchZip(context, event):
    pusher.trigger('testchannel', 'testevent', {u'some': u'data'})

I've seen several posts about this but installing the dependencies individually doesn't seem to be helping.

Thanks!

Edit

Here is the stack trace

No module named ndg.httpsclient.ssl_peer_verification: ImportError
Traceback (most recent call last):
  File "/var/task/lambda.py", line 5, in createPitchZip
    pusher = Pusher(app_id='***', key='***', 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 49, in <module>
    from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
ImportError: No module named ndg.httpsclient.ssl_peer_verification

回答1:

I would suggest you use virtualenv to keep track of dependencies.

Here is a psedo steps that you may need to make:

 1. virtualenv env
 2. env/bin/pip install <your packages>
 3. cd env/lib/python2.7/site-packages; zip -r mylambda.zip *
 4. also zip your lambda handler 

If you installed everything properly , then zip file mylambda.zip will contain everything you need.



回答2:

This might sound silly, but don't name your local variable pusher. The binding of variables in the lambda function happens late, during its execution, and in a scope that you might not be expecting.

I'm not suggesting this is the full answer, but do an import pusher and change to myPusher = pusher.Pusher... to see if the error message changes. If it doesn't, then the problem lies elsewhere.



回答3:

Adding an empty __init__.py file to the ndg directory fixed this issue.