如何导入Python Lambda图层?

时间:2019-01-22 22:02:31

标签: python import aws-lambda

我有一个以此为内容的文件。

def print_hello_world():
    print ('Hello World')

已将其压缩到包含__init__.py文件的文件夹中。

我将此添加为图层并设置python3.6的正确运行时。

如何通过lambda代码将其导入到我的lambda函数中?

编辑:研究后,我发现lambda将层安装在/ opt上,如果通过sys.path.insert(0,'/ opt')将/ opt添加到syspath中,则可以导入层。

您可以在以下位置查看图层:print(os.listdir(“ / opt”))

必须有一种更优雅的方法!

3 个答案:

答案 0 :(得分:2)

所以我最近遇到了这个问题,我相信我找到了一种导入图层的更简便方法。

首先查看您上传的zip文件的结构:

  • 您不需要__init__.py文件
  • 将所有要导入的脚本放入文件夹名称python
  • 压缩该python文件夹(选择您想要的任何名称)并将其上传到您的图层
  • 上传后,并且已经在lambda函数中配置了该图层,您只需将其与import {filename}
  • 一起使用

因此,如果您在python文件夹中的脚本被称为custom_helper.py,请使用import custom_helper将其导入lambda。

我不确定这是否是干净的方法,但似乎很容易开始。

答案 1 :(得分:1)

您必须:

  1. 使用Docker构建lambda层: sudo docker run -v "$PWD":/var/task "lambci/lambda:build-${penv}" /bin/sh -c "pip install -r requirements.txt -t python/lib/${penv}/site-packages/; exit"
  2. 将图层上传到AWS
  3. 在lambda中添加图层
  4. 导入之前,您的Lambda中的
  5. 型号sys.path
    import sys; 
    sys.path.append('/opt/python/lib/python3.7/site-packages');
    import apsw
    print(apsw.__file__)

/opt/python/lib/python3.7/site-packages/apsw.cpython-37m-x86_64-linux-gnu.so

更新: 看起来您需要将build放在/ opt / python下,因此无需使用它 sys.path.append('/opt/python/lib/python3.7/site-packages');

新建步骤:

mkdir -vp my-layer/python && cd my-layer/python
python3 -m pip install click -t ./ 
cd ..
zip -r9 my-layer python

现在将图层添加到lambda函数 您可以导入:

import click

答案 2 :(得分:0)

您的zip文件应具有以下结构:

python / lib / python3.7 / site-packages

也就是说,它需要一个名为Python的文件夹,一个名为lib的文件夹,一个名为python3.7的文件夹以及一个名为site-packages的文件夹。该文件夹中的所有内容都可以导入。

(如果您使用的是其他版本的Python,则该版本应位于路径中,而不是3.7)