10

我已经建立了一个 Cloud9 环境来开发和测试 lambda 函数。为了使环境“更干净”,我选择使用 lambda 层来指定函数的依赖项。通过这样做,我已经从环境中删除了依赖文件夹,但我现在无法在本地进行测试。

例如,我有一个用于 Stripe 的 python 库的 lambda 层。我能够在 Cloud9 中编写一个引用条带的 lambda 函数,部署该函数,并成功地远程测试该函数。但我无法在本地运行该功能,因为我得到“无法导入条纹”

有没有办法通过在 Cloud9 中指定层 ARN 在本地测试依赖于 lambda 层的 lambda 函数?

4

4 回答 4

5

不幸的是,AWS Cloud9 目前不支持 Lambda 层。

于 2019-03-04T12:35:58.033 回答
3

AWS Cloud9 文档说不支持从AWS 资源窗口执行具有层的函数。但是您可以在 Cloud9 终端窗口上使用sam local invoke或。aws lambda例如

sam local invoke --event input.json --template ../template.yml <function_name>

将创建一个新的 docker 镜像,其中包含将用于执行 lambda 函数的层依赖项。TAG名称在这里解释

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
于 2019-05-07T18:06:00.497 回答
1

对于从 Lambda 工作的层的问题,有一个简单的解决方法,但是本地测试失败:

在导入层中包含的模块之前,将一个文件夹添加到您的 python 路径中,并将您的层包(解压缩)放在该路径中。

这是一个示例,其中“nltk”包来自层。此项目中的所有层都存储在 Lambda 文件夹本身的父目录中的“Layers”文件夹中,但您可以从任何级别执行此操作:

import sys
import os
sys.path.append(os.path.abspath("../Layers/custom_NLTK/python"))
import nltk

希望这可以帮助!

于 2020-04-05T20:42:20.197 回答
1

我也遇到了同样的问题,最终找到了解决方法。可能对其他人有用。

我的用例相当简单,我需要在应用程序的多个函数之间共享一些通用代码。Lambda 层是完美的解决方案,但我无法让集成以我在 cloud-9 中所需的方式工作。

我最终没有使用 lambda 层。我在应用程序级别创建了一个名为 common-code 的新文件夹(不是函数)。

然后,我为每个函数在公共区域中需要的每个文件创建了一个硬链接(非符号链接)

ln ../common-code/some-helper-functions.js some-helper-functions.js

然后文件在部署时被 cloud-9 正确打包。

于 2020-08-17T21:21:06.127 回答