[英]How to update Lambda Function's version in API Gateway with boto3?
[英]How to downgrade the boto3 version in an AWS Lambda Function
我需要在Lambda(Python 3.7)中使用我自己的boto3版本。 Lambda默認Python 3.7 env(1.9.42)中包含的版本不支持出於某種原因使用Textract。
為此,我根據指南做了以下事項:
pip freeze > requirements.txt
會產生這個文件: # requirements.txt
boto3==1.9.138
botocore==1.12.138
docutils==0.14
jmespath==0.9.4
python-dateutil==2.8.0
s3transfer==0.2.0
six==1.12.0
urllib3==1.24.2
mkdir build
pip3 install -r requirements.txt -t build/
cd build
zip -r ../boto3_layer.zip .
然后我使用GUI上傳一個新的Lambda Layer(稱為boto3Layer)。 然后我成功地將圖層添加到我的Lambda函數中。
問題是,我無法弄清楚如何使用內聯代碼編輯器將所述層導入我的代碼中。
我有以下代碼:
...
from boto3_layer as boto3
...
log.info(boto3)
我收到錯誤"errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'"
我也嘗試只導入boto3
,但確認它是錯誤的版本(它是Lambda使用的版本),所以我的導入沒有覆蓋它。
我想知道如何將我的自定義圖層導入到我的代碼中! 謝謝
編輯:嘗試建議:
virtualenv python --python=python3.7
source python/bin/activate
然后pip3 install boto3
zip -r boto3_layer.zip python/lib/
boto3_layer.zip
創建新的Lambda圖層並將圖層添加到Lambda函數 "errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'",
最終導入boto3
而不是我的自定義名稱。
import boto3
def lambda_handler(event, context):
textract = boto3.client('textract')
目錄不是模塊/包。 你正在使用的方法永遠不會奏效。
而不是所有這些,使用所需的Python版本創建一個虛擬環境 - 可能在docker中,您可以在其中安裝軟件包。 然后你必須從虛擬環境壓縮lib
文件夾,以便在解壓縮時該層將產生類似於的目錄結構
python/
lib/
pythonx.y/
site-packages/
...
頂級目錄必須命名為python
才能生效。
如果您正確執行此操作,那么您應該能夠正常導入您的boto3
版本。
lambda中的文件將解壓縮到名為/opt
的目錄,這將包含在PYTHONPATH
。 這意味着您需要在zip結構中添加額外的boto3_layer。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.