在多个AWS lambda中导入python模块

在多个AWS lambda中导入python模块,python,amazon-web-services,amazon-s3,aws-lambda,Python,Amazon Web Services,Amazon S3,Aws Lambda,我有几个AWS Lambda函数。所有这些函数都使用一些常用的辅助函数。我将这些助手函数放在一个名为helper\u functions.py的单独文件中。我想在所有AWS Lambda函数中导入此模块。我找不到存储此模块的位置(helper\u functions.py),因此当我更改此模块时,我不必更改Lambda函数中的任何内容 我想到的一些选择是: 在AWS S3上上载模块,然后将其加载到每个Lambda中 函数从S3开始并使用这些函数。(如有可能) 编写一些脚本(我还没有弄明白),将模

我有几个AWS Lambda函数。所有这些函数都使用一些常用的辅助函数。我将这些助手函数放在一个名为
helper\u functions.py
的单独文件中。我想在所有AWS Lambda函数中导入此模块。我找不到存储此模块的位置(
helper\u functions.py
),因此当我更改此模块时,我不必更改Lambda函数中的任何内容

我想到的一些选择是:

  • 在AWS S3上上载模块,然后将其加载到每个Lambda中 函数从S3开始并使用这些函数。(如有可能)

  • 编写一些脚本(我还没有弄明白),将模块与Lambda一起打包 函数的Python文件,并将其上载到AWS Lambda上


  • 请建议一个更好的解决方案来管理模块,并以更有效的方式导入它。

    我为此奋斗了很长一段时间。以下是我的解决方案(可能有更好的方法):

    在文件系统中设置助手函数,如下所示:

    pathToSomewhere/my\u helper/helper\u functions.py
    路径到somewhere/my\u helper/\uuuu init\uuuu.py
    pathToSomewhere/setup.py
    

    其中
    \uuuu init\uuuu.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='null@example.com',
          packages=['my_helper'],
          install_requires=['boto3'],
          zip_safe=False)
    
    现在让我们打包
    my_helper
    。从
    路径到某个位置/
    运行:

    python setup.py sdist
    
    我假设您已经知道如何创建和上传虚拟环境来运行lambda函数。如果没有,请告诉我

    现在,让我们将
    my_helper
    安装到lambda函数的虚拟环境中。假设您的虚拟环境名为
    worker\u env

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

    现在压缩
    worker env
    和实际的lambda脚本并上传

    Lambda包有大小限制。您应该在zip包中包含适合该大小的所有模块。剩下的模块可以存储在s3中,然后从s3导入。如果我在所有Lambda包中包含模块,然后我想在模块中更改一些内容,那么我必须更新所有Lambda包,对吗?我想包含zip包中的模块会更有效。您可以编写一个小脚本来更新所有包中的模块。检查这个:我不明白这个问题。如果您有单个模块,并且可以从s3导入它,那么更改它意味着您无论如何都不必更改脚本中的任何内容。如果这里缺少一个技术问题,您可以随时在运行时下载该模块,并
    sys.path.append
    其路径以使用它。这并不令人惊讶,但会奏效。请看这里关于pip(和VirtualNVs)的部分:谢谢你的回复!但目前,我使用AWS Codepipeline进行连续交付,这是非常酷的,并且很容易打包和部署任何无服务器应用程序。请检查以开始。我有一个类似的问题,请参见此处:)。但是,使用您的解决方案,如果我更改了
    helper\u functions.py
    ,我将不得不重新压缩所有AWS函数并重新上载它们。
    helper\u functions.py
    是否可以存储在某个地方(例如,
    S3
    可能),并由我所有的AWS lambda导入,这样,如果我更改它,我就不必重新压缩所有内容。