Python 推送器 AWS Lambda

Python Pusher AWS Lambda

使用 AWS Lambda 将推送通知发送到 Python 中的 Pusher 应用程序。当我将 Pusher 及其所有依赖项安装到一个目录并压缩到 Lambda 时,我 运行 进行了一个简单的测试并得到了这个错误。

No module named ndg.httpsclient.ssl_peer_verification

这是我正在尝试的代码 运行。

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'})

我看过几篇关于此的帖子,但单独安装依赖项似乎没有帮助。

谢谢!

编辑

这是堆栈跟踪

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

我建议您使用 virtualenv 来跟踪依赖关系。

以下是您可能需要执行的伪步骤:

 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 

如果您正确安装了所有内容,那么 zip 文件 mylambda.zip 将包含您需要的所有内容。

这听起来可能很傻,但不要命名您的局部变量推送器。 lambda 函数中变量的绑定发生较晚,在其执行期间,并且发生在您可能意想不到的范围内。

我并不是说这是完整的答案,而是执行 import pusher 并更改为 myPusher = pusher.Pusher... 以查看错误消息是否发生变化。如果不是,则问题出在其他地方。

将空 __init__.py 文件添加到 ndg 目录解决了这个问题。