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 设备上没有剩余空间错误

AWS Lambda - 访问被拒绝错误 - GetObject

AWS API Gateway - Lambda - 内部服务器错误

AWS Lambda python库函数错误

将 C# 函数发布到 AWS lambda 时出现“类型或命名空间不存在”错误

AWS Lambda:Redis ElastiCache 连接超时错误