2016-12-14 84 views
2

我有幾個AWS Lambda函數。所有這些功能都使用一些常用的幫助功能。我已將這些幫助函數放在一個名爲helper_functions.py的單獨文件中。我想在我的所有AWS Lambda函數中導入此模塊。我無法找到存儲此模塊的地方(helper_functions.py),因此當我在此模塊中進行更改時,無需更改Lambda函數中的任何內容。在多個AWS Lambda中導入python模塊

一些我認爲有三種選擇:

  1. 上傳於AWS S3的模塊,然後在從S3開始每個拉姆達 功能加載它,並使用功能。 (如果可能)

  2. 寫一些腳本(我還沒有想出),隨着拉鍊,並上傳在AWS上LAMBDA

拉姆達 功能Python的文件一起打包模塊

請建議更好的解決方案來管理模塊並以更高效的方式導入模塊。

+1

Lambda包的大小限制。您應該在zip包中包含適合該大小的所有模塊。您可以在s3中存儲其餘的模塊並從那裏導入。 – MYGz

+0

如果我將模塊包含在所有的Lambda包中,然後我想要更改模塊中的某些內容,那麼我將不得不更新所有的Lambda包,對吧? – Sibtain

+0

包括來自zip包的模塊將會更有效率,我猜。您可以編寫一個小腳本來更新所有軟件包中的模塊。檢查此:http://docs.aws.amazon.com/cli/latest/reference/lambda/update-function-code.html – MYGz

回答

2

我一直在努力。這裏是我的解決方案(有可能是一個更好的方法):在你的文件系統

設置您的輔助函數是這樣的:

pathToSomewhere/my_helper/helper_functions.py pathToSomewhere/my_helper/__init__.py pathToSomewhere/setup.py

其中__init__.py是:

from .helper_functions import * 

setup.py

from setuptools import setup 

setup(name='my_helper', 
     version='0.10000', 
     description='My helper functions', 
     url='http://github.com/user/example', 
     license='Proprietary', 
     author='Null', 
     author_email='[email protected]', 
     packages=['my_helper'], 
     install_requires=['boto3'], 
     zip_safe=False) 

現在讓我們打包my_helper。從pathToSomewhere/運行:

python setup.py sdist 

我假設你已經知道如何創建和上傳虛擬環境來運行你的lambda函數。如果沒有,請告訴我。

現在讓我們將my_helper安裝到您的lambda函數的虛擬環境中。讓我們假設你的虛擬環境被稱爲worker_env

./worker-env/bin/pip install file://pathToSomewhere/my_helper 

現在拉上worker-env您的實際拉姆達腳本並上傳。

+0

感謝您的回覆!但是目前我比AWS Codepipeline更持久地交付,這非常酷,並且很容易打包和部署任何無服務器應用程序。查看[this](http://docs.aws.amazon.com/lambda/latest/dg/automating-deployment.html)即可開始使用。 – Sibtain