我目前正在编写一个要在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.我用下面的代码安装了这个模块:
在一个文件夹中,添加我的代码文件(按照指示添加到根目录),递归地压缩它并使用aws-cli上传它,我可以清楚地看到.zip中有一个google-cloud-firestore文件夹,所以我不确定发生了什么。如有任何帮助,我们将不胜感激!
发布于 2021-02-22 23:24:32
你要找的是一个
LambdaLayer
..。
网上有很多资源,但本质上你想以这种格式制作一个Zip文件
*
myLayer.zip/
-- python/
- lib/
- python
X.Y
/
- site-packages/
firebase-admin
- ...
*
在哪里
X.Y
是您要瞄准的python版本吗?
然后,在亚马逊网络服务控制台或您的CI/CD中,您可以在函数的配置中添加该LambdaLayer,这允许您导入其中的所有库。
发布于 2021-02-28 18:56:33
问题是,firebase-admin包使用了一些在不同OSes上以不同方式编译的库,因此您需要创建一个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/发布于 2021-02-27 05:51:03
从外观上看,您已经正确地捆绑了代码并成功地进行了部署。之所以会出现这个错误,是因为Firestore依赖于GRPC的基于C的实现。默认情况下,这在AWS Lambda上不起作用。我目前正在创建一个变通方法,并将用我的结果更新这篇文章。
https://stackoverflow.com/questions/66291208
复制相似问题