簡體   English   中英

如何為AWS Lambda捆綁Python

[英]How to bundle Python for AWS Lambda

我有一個項目我想在AWS Lambda上運行,但它超過了50MB的壓縮限制。 現在它的壓縮為128MB,帶有虛擬環境的項目文件夾位於623MB並包含(空間的頂級用戶):

  • scipy(~187MB)
  • 熊貓(~108MB)
  • numpy(約74.4MB)
  • lambda_packages(~71.4MB)

沒有virtualenv該項目<2MB。 requirements.txt是:

click==6.7
cycler==0.10.0
ecdsa==0.13
Flask==0.12.2
Flask-Cors==3.0.3
future==0.16.0
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
matplotlib==2.1.2
mpmath==1.0.0
numericalunits==1.19
numpy==1.14.0
pandas==0.22.0
pycryptodome==3.4.7
pyparsing==2.2.0
python-dateutil==2.6.1
python-dotenv==0.7.1
python-jose==2.0.2
pytz==2017.3
scipy==1.0.0
six==1.11.0
sympy==1.1.1
Werkzeug==0.14.1
xlrd==1.1.0

我使用Zappa進行部署,因此我對整個基礎架構的理解是有限的。 我的理解是一些(很少)的庫沒有上傳,所以例如numpy,那部分沒有上傳,亞馬遜的版本被使用,已經在該環境中可用。

我建議使用以下工作流程(不使用slim_handler S3存儲桶):

  1. 刪除所有包中與“test _ * .py”匹配的所有文件
  2. 手動樹震動scipy因為我只使用scipy.minimize ,刪除大部分並重新運行我的測試
  3. 縮小所有代碼並使用pyminifier混淆
  4. zappa部署

要么:

  1. 運行compileall以獲取.pyc文件
  2. 刪除所有* .py文件,讓zappa上傳.pyc文件
  3. zappa部署

我遇到了slim_handler: true問題slim_handler: true ,我的連接斷開,上傳失敗或發生其他一些錯誤,並且上傳到S3的約25%我得到Could not connect to the endpoint URL 出於這個問題的目的,我希望將依賴關系降低到可管理的級別。

然而,主應用程序小於2MB的超過一半的依賴關系必須是某種記錄。

我的問題是:

  1. AWS的解壓縮限制是多少? 是250MB還是500MB?
  2. 我是否采用上述方法縮小包裝尺寸?
  3. 是否可以更進一步使用.pyz文件?
  4. 是否有任何標准實用程序可以幫助解決上述問題?
  5. 是不是有用於python的樹搖動庫?
  1. AWS中的限制是針對解壓縮的250MB代碼(如https://hackernoon.com/exploring-the-aws-lambda-deployment-limits-9a8384b0bec3所示
  2. 我建議去第二種方法並編譯所有內容。 我認為你還應該考慮使用無服務器框架。 它不會強迫你創建非常沉重的virtualenv。

我已經看到你的所有包都可以壓縮到83MB(只是包)。

我的解決方法是:

  1. 使用無服務器框架(考慮從flask直接移動到API網關)
  2. 使用以下方法在本地安裝您的軟件包:

     pip install -r requirements.txt -t . 
  3. 嘗試編譯.pyc文件的方法,並刪除其他文件。

  4. 部署:

     sis deploy 

希望能幫助到你。

暫無
暫無

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

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