我已经设置了一个Cloud9环境来开发和测试lambda函数。为了使环境更“干净”,我选择使用lambda层来指定函数的依赖关系。这样,我从环境中删除了依赖文件夹,但是现在无法在本地测试。
例如,我为Stripe的python库提供了一个lambda层。我能够在Cloud9引用条中编写一个lambda函数,部署该函数,并成功地远程测试该函数。但是我无法在本地运行该功能,因为我“无法导入条带”
是否有一种方法可以通过在Cloud9中指定ARN层在本地测试依赖于lambda层的lambda函数?
答案 0 :(得分:1)
不幸的是,AWS Cloud9目前不支持Lambda层。
答案 1 :(得分:1)
我也遇到了同样的问题,并最终找到了解决方法。可能对其他人有用。
我的用例非常简单,我需要在应用程序的多个功能之间共享一些通用代码。 Lambda层是完美的解决方案,但是我无法按照Cloud-9中所需的方式来进行集成。
我最终没有使用lambda层。我在应用程序级别创建了一个名为common-code的新文件夹(不是函数)。
然后我通过每个函数为我在公共区域中需要的每个文件创建了一个硬链接(不是符号)
ln ../common-code/some-helper-functions.js some-helper-functions.js
然后在部署时,文件会被cloud-9正确打包。
答案 2 :(得分:0)
AWS Cloud9 documentation表示不支持通过 AWS资源窗口执行具有图层的功能。但是您可以在Cloud9终端窗口上使用sam local invoke
或aws lambda
。例如
sam local invoke --event input.json --template ../template.yml <function_name>
将创建具有层依赖性的新docker映像,该映像将用于执行lambda函数。 The TAG name is explained here
master:~/environment/ahdv (master) $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
samcli/lambda nodejs8.10-03eb754e9966a1a2f789d500d 6b52bcffdc2e About an hour ago 968MB
lambci/lambda python3.6 420212d009b3 3 weeks ago 1.03GB
lambci/lambda python2.7 7a436931435e 3 weeks ago 901MB
lambci/lambda nodejs4.3 c0914066d9a8 3 weeks ago 931MB
lambci/lambda nodejs6.10 74b405a65ed4 3 weeks ago 946MB
lambci/lambda nodejs8.10 edf1f613772c 3 weeks ago 960MB
答案 3 :(得分:0)
有一个简单的解决方法可解决Lambda上的图层工作问题,但本地测试失败:
在导入图层中包含的模块之前,在python路径中添加一个文件夹,然后只需在该路径中放置(未压缩)Layer包即可。
这里是一个示例,其中“ nltk”包来自图层。此项目中的所有图层都存储在Lambda文件夹本身的父目录的“ Layers”文件夹中,但是您可以从任何级别执行此操作:
import sys
import os
sys.path.append(os.path.abspath("../Layers/custom_NLTK/python"))
import nltk
希望这会有所帮助!