Firebase-Admin with AWS Lambda Python



我目前正在编写一个部署在AWS Lambda上的Python服务器。我想使用firebase-admin包发送通知与FCM和从云firestore读取数据。但是,当我尝试使用.zip文件归档将函数部署到AWS Lambda时,我在执行时得到以下错误:

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': Failed to import the Cloud Firestore library for Python. Make sure to install the "google-cloud-firestore" module.

我用这个安装了模块:pip install --target . firebase-admin到一个文件夹中,添加了我的代码文件(按照指示到根目录),递归地压缩它,并用aws-cli上传它,我可以清楚地看到,有一个google-cloud-firestore文件夹在。zip中,所以我不知道发生了什么。任何帮助都是感激的!

问题是firebase-admin包使用的一些库在不同的操作系统上编译不同,所以你需要创建一个docker映像并安装所有内容,将其压缩并作为一个层上传。下面是一个docker文件示例:

FROM amazonlinux:2.0.20210126.0
RUN yum -y groupinstall "Development Tools" && 
yum -y install openssl-devel bzip2-devel libffi-devel && 
yum -y install wget && 
wget https://www.python.org/ftp/python/3.8.7/Python-3.8.7.tgz && 
yum install -y tar && 
yum install -y gzip && 
tar xvf Python-3.8.7.tgz && 
cd Python-3.8*/ && 
./configure --enable-optimizations && 
make altinstall && 
yum install -y zip && 
yum clean all

RUN python3.8 -m pip install --upgrade pip && 
python3.8 -m pip install virtualenv
RUN python3.8 -m venv myvenv
RUN source myvenv/bin/activate
RUN pip install firebase-admin -t ./python
RUN deactivate
RUN zip -r python.zip ./python/

然后复制zip文件:

docker cp container_name:python.zip ./Desktop/ 

你要找的是一个LambdaLayer。

网上有很多资源,但本质上你想制作一个格式为*:

的Zip文件

myLayer.zip python//
——
- lib/
------ pythonX。Y/
-------- 网站/
----------firebase-admin
---------- ...

<一口>*,X。Y

然后,无论是在AWS控制台还是在您的CI/CD中,您都可以将LambdaLayer添加到Function的配置中,从而允许您导入其中的所有库。

看起来您已经正确地绑定了代码并成功地部署了。发生此错误是因为Firestore依赖于基于c的GRPC实现。默认情况下,这在AWS Lambda上不起作用。我目前正在创建一个解决方案,并将更新这篇文章与我的结果。

如果有人能解释如何运行docker文件,将对下一个人有用。

我不是专家,所以我所做的是根据提到的映像创建一个docker实例,然后我在CLI中单独执行每个命令,最后,由于我无法将文件从容器压缩并复制到桌面,我不得不通过Linux虚拟环境中的windows资源管理器找到文件夹,以便我可以压缩并带来。

它确实有效,但是,如果有人能通过让每个人都知道如何构建和执行docker文件来补充最佳答案,将会非常有帮助。

最好!

最新更新