簡體   English   中英

Firebase-Admin 與 AWS Lambda Python

[英]Firebase-Admin with AWS Lambda Python

我目前正在編寫一個 Python 服務器以部署在 AWS Lambda 上。 我想使用 firebase-admin package 使用 FCM 發送通知並從雲 Firestore 讀取數據。 但是,當我嘗試使用 .zip 文件檔案將我的 function 部署到 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 pip install --target. firebase-admin到一個文件夾中,添加我的代碼文件(按照說明添加到根目錄),遞歸壓縮它並使用 aws-cli 上傳,我可以清楚地看到.zip 里面有一個 google-cloud-firestore 文件夾所以我不確定發生了什么事。 任何幫助表示贊賞!

問題是 firebase-admin package 使用了一些在不同操作系統上以不同方式編譯的庫,因此您需要創建一個 docker 映像並將所有內容安裝在那里,zip 將其作為圖層上傳。 這是一個示例 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/
---- 庫/
------ python X.Y /
-------- 站點包/
----------火力基地管理員
----------...

*其中X.Y是您要定位的 python 版本

然后,在 AWS 控制台或 CI/CD 中,您可以將該 LambdaLayer 添加到您的函數配置中,這樣您就可以導入其中的所有庫。

從外觀上看,您已正確捆綁代碼並成功部署。 發生錯誤是因為 Firestore 依賴於基於 C 的 GRPC 實現。 默認情況下,這不適用於 AWS Lambda。 我目前正在創建一個解決方法,並將用我的結果更新這篇文章。

運行這個

pip install --target . firebase-admin

進入您的根文件夾而不是子文件夾,它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM