如何为Alexa的AWS lambda函数添加python库?

时间:2016-08-10 15:01:17

标签: python amazon-web-services pip aws-lambda alexa-skills-kit

我正在按照教程使用Python创建一个Alexa应用程序:

Python Alexa Tutorial

我能够成功完成所有步骤并使应用程序正常工作。我现在想要修改python代码并使用外部库,例如import requests 或我使用pip安装的任何其他库。如何设置我的lambda函数以包含我在本机上本地安装的任何pip包?

8 个答案:

答案 0 :(得分:15)

official documentation非常好。简而言之,您需要创建一个目录的zip文件,其中包含lambda函数的代码和您在顶层使用的所有外部库。

您可以通过停用virtualenv来模拟它,将所有必需的库复制到工作目录中(如果在命令行上调用脚本,则始终在sys.path中),并检查脚本是否仍然有效。

答案 1 :(得分:14)

正如Amazon官方文档链接here中所描述的那样,只需在您拥有python lambda代码的文件夹中安装所需的软件包之后创建所有文件夹内容的zip即可。

正如Vineeth在他的评论中指出的那样,从内联代码编辑器转换为zip文件上载方法的第一步是在配置设置下更改lambda函数处理程序名称以包含保存lambda的python脚本文件名处理程序。

lambda_handler => {您的Python脚本文件名} .lambda_handler

CONFIGURE LAMBDA FUNCTION

python-lambdalambda-uploader等其他解决方案有助于简化上传过程,最重要的是本地测试。这些将节省大量的开发时间。

答案 2 :(得分:7)

您可能希望使用zappa之类的框架来处理打包和部署lambda函数。

您可以将其与flask-ask结合使用,以便更轻松地制作Alexa技能。甚至还有一个视频教程(来自zappa自述文件)here

答案 3 :(得分:3)

回应@ d3ming的答案,框架是一个很好的方法。手动创建部署包是不可能的,但是您需要上传您的包裹'已编译的代码,如果您在非Linux系统上编译该代码,则系统与Lambda函数部署环境之间存在差异的可能性很高。

然后,您可以通过在Linux机器或Docker容器上编译代码来解决这个问题。但是在所有这些复杂性之间,您可以通过采用框架获得更多。

Serverless很好地被采用并支持自定义python包。它甚至与Docker集成以编译您的python依赖项并为您构建部署包。

如果您正在寻找有关此问题的完整教程I wrote one for Python Lambda functions here.

答案 4 :(得分:0)

为解决此特定问题,我们使用了一个名为juniper的库。简而言之,您需要做的就是创建一个非常简单的清单文件,如下所示:

functions:
  # Name the zip file you want juni to create
  router:
    # Where are your dependencies located?
    requirements: ./src/requirements.txt.
    # Your source code.
    include:
    - ./src/lambda_function.py

在此清单文件中,调用juni build将为您创建zip文件工件。该文件将包含您在requirements.txt中指定的所有依赖项。

该命令将创建此文件./dist/router.zip。我们正在将该文件与sam模板结合使用。但是,您可以使用该zip并将其上传到控制台或通过awscli。

答案 5 :(得分:0)

我为此也挣扎了一段时间。在深入研究aws资源之后,我了解了aws上的lambda函数在Linux上本地运行。拥有与linux版本匹配的python软件包版本非常重要。

您可能会在以下位置找到更多信息: https://aws.amazon.com/lambda/faqs/

按照步骤下载版本。 1.从pypi找到软件包的.whl映像,然后将其下载到本地。 2.压缩软件包并将其添加为aws lambda中的图层 3.将层添加到lambda函数。

注意:请确保您要安装python软件包的版本与aws lambda执行计算任务的linux操作系统匹配。

参考文献: https://pypi.org/project/Pandas3/#files

答案 6 :(得分:0)

可以在https://github.com/keithrozario/Klayers处通过Layers导入很多python库,或者您可以使用无服务器之类的框架,该框架具有将包直接打包到您的工件中的插件。

答案 7 :(得分:0)

Amazon创建了一个处理您的情况的存储库: https://github.com/awsdocs/aws-lambda-developer-guide/tree/master/sample-apps/blank-python

空白应用程序是一个示例,该示例演示了如何根据需要推送lambda函数以及Amazon带来的好处。

您需要做的就是逐步进行操作,并根据需要更新存储库。