簡體   English   中英

如何降級AWS Lambda函數中的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。

為此,我根據指南做了以下事項:

  1. 使用以下命令創建自定義程序包:
    • 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使用的版本),所以我的導入沒有覆蓋它。

我想知道如何將我的自定義圖層導入到我的代碼中! 謝謝

編輯:嘗試建議:

對於嘗試完成相同任務的其他用戶:

  1. virtualenv python --python=python3.7
  2. source python/bin/activate然后pip3 install boto3
  3. zip -r boto3_layer.zip python/lib/
  4. 使用boto3_layer.zip創建新的Lambda圖層並將圖層添加到Lambda函數
  5. 試圖運行上面的保存代碼失敗"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.

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