AWS Lambda to Firestore错误:无法导入名称' cygrpc'

时间:2017-10-10 14:22:34

标签: python-3.x amazon-web-services firebase firebase-storage google-cloud-firestore

在我的AWS Lambda Python 3.6功能上,我想使用Google Firestore(Cloud Firestore BETA)进行缓存,但是只要我添加

from google.cloud import firestore

到我的Python脚本并将ZIP上传到AWS Lambda函数,Lambda测试返回错误

Unable to import module 'MyLambdaFunction': cannot import name 'cygrpc'. 

AWS CloudWatch日志不包含有关错误的任何详细信息,只是包含相同的错误消息。

Lambda函数在我的本地开发机器(Windows 10)上运行良好,我可以写入Firestore。如果我注释掉导入和所有与Firestore相关的行,它也适用于AWS。

我有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

Firestore的python客户端依赖于GRPC的基于C的实现。这似乎在AWS Lambda中默认不起作用。

Node.js用户报告了类似的问题,他们已经记录了building a docker image的解决方法。

这应该类似于获取任何其他需要本机代码才能工作的python包。也许这种方法可以获得scikit to work

我希望这足以让你朝着正确的方向前进,但不幸的是我对AWS Lambda一无所知: - (。

答案 1 :(得分:1)

遇到同样的问题,我使用插件serverless-python-requirements解决了无服务器框架并传递:

pythonRequirements:
    dockerizePip: true

基本上,这会将基于c的软件包(以及所有其他软件包)安装在可以工作的docker容器中,然后将它们符号链接到lambda fn。

可在以下网址找到有用的指南:https://serverless.com/blog/serverless-python-packaging/

插件:https://github.com/UnitedIncome/serverless-python-requirements