AWS Lambda 到 Firestore 错误:无法导入名称“cygrpc”
Posted
技术标签:
【中文标题】AWS Lambda 到 Firestore 错误:无法导入名称“cygrpc”【英文标题】:AWS Lambda to Firestore error: cannot import name 'cygrpc' 【发布时间】:2018-03-22 00:06:45 【问题描述】:在我的 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。
有什么提示可以解决这个问题吗?
【问题讨论】:
【参考方案1】:Firestore 的 python 客户端依赖于基于 C 的 GRPC 实现。这似乎在 AWS Lambda 中默认不起作用。
Node.js 用户报告了类似的问题,他们记录了building a docker image 的解决方法。
这应该类似于任何其他需要本机代码才能工作的 python 包。也许类似于这种获取scikit to work的方法?
我希望这足以让您朝着正确的方向前进,但不幸的是我对 AWS Lambda 一无所知:-(。
【讨论】:
【参考方案2】:遇到了同样的问题,我通过使用插件serverless-python-requirements
解决了它的无服务器框架并传递:
pythonRequirements:
dockerizePip: true
本质上,这会将您基于 c 的软件包(以及所有其他软件包)安装在一个可以工作的 docker 容器中,然后将它们符号链接到您的 lambda fn。
可以在以下位置找到有用的指南:https://serverless.com/blog/serverless-python-packaging/
插件:https://github.com/UnitedIncome/serverless-python-requirements
【讨论】:
以上是关于AWS Lambda 到 Firestore 错误:无法导入名称“cygrpc”的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda - 访问被拒绝错误 - GetObject
AWS API Gateway - Lambda - 内部服务器错误