问题标签 [aws-lambda-layers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python-3.x - 无法导入模块“lambda_function”:没有名为“pandas”的模块
START RequestId:3d5691d9-ad79-4eed-a26c-5bc3f1a23a99 版本:$LATEST 无法导入模块“lambda_function”:没有名为“pandas”的模块
END RequestId:3d5691d9-ad79-4eed-a26c-5bc3f1a23a99
我使用 Windows 7 64 位作为主机操作系统。
我想做的事
我只是想在 AWS-Lambda 环境中使用 pandas。就像我在 windows 环境中使用它一样,我正在为 Lambda 寻找一个简单的解决方案。
到目前为止我尝试过的
- 在虚拟盒子上安装了 Xubuntu。
myvenv
在虚拟盒上创建一个名为 Xubuntu 的虚拟环境。- 然后我在
myvenv
. - 此后,我将文件夹内容复制
myvenv
到'/usr/local/lib/python3.6/site-packages/'
我的主机操作系统。 - 在主机操作系统(Windows 7)中,我创建了一个名为 的文件夹
packs
,粘贴了myvenv
. - 在主机操作系统(Windows 7)中创建了一个
lambda_function.py
脚本packs
- 然后我使用 7zip 软件压缩文件夹并
packs
上传zip
Lambda
- 在 Lambda 中,lambda 函数处理程序名称为
lambda_handler()
. 代码片段看起来像,
将熊猫导入为 pd
- 处理程序被命名为
lambda_function.lambda_handler
. 我已授予 lambda-roleAWSLambdaFullAccess
权限。 - 超时设置为 4 分 3 秒。
测试事件看起来像
{ "key1": "如果一切正常,这将被打印出来" }
我尝试了以下解决方案:
- 从这里为 pandas 和 numpy 尝试了预编译的与 linux 兼容的二进制文件——没有运气。
- 在 Lambda 中,将其更改
Handler info
为python_filename.function_name。就我而言,它是lambda_function.lambda_handler - failed with no module named 'pandas' error。 - 将 lambda 函数放在根文件夹中,使用 7zip 软件压缩文件夹并将文件夹上传到 S3 存储桶。就我而言,我将函数放置在 location
python\lib\python3.6\site_packages\lambda_function.py
failed with no module named 'pandas' error。 - 已经尝试过发布在 SO, 1 , 2 , 3 , 4 , 5 , 6上的这些相关解决方案
注意:我不想使用 Docker,因为我不知道如何使用它,我也不愿意学习它,因为我现在很生气。我来自 Windows 环境(这很糟糕,我现在知道了。)
关于如何让它发挥作用的任何想法。
mongoose - Lambda:找不到模块 './drivers/node-mongodb-native/connection'”,虽然添加了 mongoose 层
我有一个 NestJS 应用程序,在我的处理程序文件中我导入猫鼬来创建连接:
然后,在我的处理函数中:
现在我已经在没有猫鼬的情况下完全部署并测试了我的应用程序,并且一切正常。
相关无服务器配置:
我添加了一个 mongoose 层,在 zip 中我有一个名为“nodejs”的文件夹,其中有 package.json 和“node_modules”文件夹,其中包含 npm 安装的所有依赖项。
在此之前我使用过层,并且没有以相同的方式安装问题。
但是,在尝试任何端点时,我仍然在控制台上得到这个:
amazon-web-services - 异步调用 AWS Lambda 不会产生任何日志
我已按照以下说明操作:https ://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#dlq为了从命令行异步调用我的 Lambda 函数:
我确实被status code 202
退回,但我没有看到任何有关执行的日志。
我怎样才能解决这个问题?
编辑:
以下是我的 JSON 格式的执行策略:
amazon-web-services - 将 Tensroflow 库部署为 AWS Lambda 层
我正在尝试将Tensorflow(特别是:)部署libtensorflow.so.1, libtensorflow.so.1.14.0, libtensorflow_framework.so.1, libtensorflow_framework.so.1.14.0
为AWS Lambda Layer。我收到以下错误:
如何通过删除与我使用 Tensorflow Lambda 层的 Lambda 函数无关的一些内容来更改这些 .so 文件?
python - yara-python 无法导入 AWS Lambda
我正在尝试将 yara 库导入 AWS Lambda 函数,但始终出现以下错误:
我尝试添加一个包含请求库和 yara 库的层,导入请求有效,但导入 yara 无效。
我正在使用的 lambda 函数如下。它在这个阶段除了导入 yara 什么都不做。
我也尝试过创建一个虚拟环境,安装软件包,创建 lambda 函数并将其作为 lambda 函数上传到 AWS,这会产生相同的错误。
您不能在 AWS Lambda 中创建符号链接,/var/lang/lib/libyara.so
因为 lambda 只允许写入/tmp
.
有没有人有这个工作?
node.js - AWS Lambda 层和本地结构
我在如何配置我的本地环境以重现 prod env 的行为方面遇到问题。
我的 prod env 的简化视图:
A、B和C是经典的 node.js lambda 函数。A & B共享一些lodash.js
我想在 lambda 层下分组的常见依赖项(比方说):L。
对于我的开发环境,我使用 Lerna(但这不是强制性的)作为具有这种结构的单声道存储库工作:
要发布L,我所要做的就是安装它的依赖项并将node_modules文件夹的内容复制到nodejs/node_modules
我层的路径中。
但我目前无法做到的是让模块A和B解决它们在标准node_modules路径和L node_modules文件夹中的依赖关系。
一些不可接受的解决方案:
- 复制依赖项
- 在 lerna package.json中全局添加L依赖项(因为在我的真实环境中我有多个层)
node.js - 如何将 lambda 层中的文件复制到 /opt/bin 目录?
我正在使用 AWS Lambda 中的 PDF 到图像转换项目,但遇到了一些问题,因为 AWS lambda 没有像ImageMagick
环境中那样的相关二进制文件,然后我按照一些链接和 StackOverflow 问题并将相关二进制文件作为一个层,对于这项工作,我不得不使用已Ghostscript
编译的二进制文件。
层 zip 包含这样的文件
GhostScript.zip > bin > gs
我有一个包装库调用pdf2png
,它将执行一个进行转换的子进程,这个子进程使用的命令是上面提到的实用程序gs
,但我的问题是我提到的实用程序的路径是错误的,它会抛出一个错误说,
错误:spawn /opt/bin/bin/gs ENOENT
所以我想知道的是 lambda 层文件将如何复制到/opt/bin/
目录中?我应该如何替换路径?
对应的代码,
javascript - 如何在子目录中包含nodejs模块
对于 AWS Lambda 层,我有一个这样的目录结构。
test.js
在上传到 AWS 之前,我有一个文件来测试功能。是否可以将我的test.js
文件放在Main
文件夹而不是nodejs
文件夹中,并且仍然让它拾取nodejs
文件夹中的模块?
我问是因为您压缩nodejs
要为 AWS Lambda 层上传的文件夹,但我不想将我test.js
的文件包含在存档中。
更新:下面的答案帮助我找到了解决方案。您只需在 require 中输入模块的完整路径。
node.js - 无法从 aws-lambda 解析“nodejs/”目录下的自定义依赖项
我正在尝试从 lambda 层导入自定义依赖项,但无法正常工作。
环境:nodejs8.10
我有一个包含以下目录结构的层:
在这里,util.js 有以下代码:
在 myLambda.js 中,我尝试SomeFunction
使用以下代码进行调用:
但是,我收到了这个错误:
提前致谢。
amazon-web-services - 旧的 AWS Lambda 层会自动删除吗?如果没有,如何删除它们?
在阅读了这篇讨论使用 AWS Lambda 函数的主要缺点的文章后,我试图避免作者必须处理的事情,并对我自己的代码进行一些清理:
“ Lambda 版本每个函数。我们使用无服务器框架开发 Lambda 应用程序。这意味着无服务器创建 Lambda 函数。我们的平均 Lambda 函数约为 60MB。[...]
当您将 CI/CD 与快速开发和 Lambda 函数结合时,你会得到很多版本,甚至上百个。而 Lambda 代码存储限制为 75GB。我们达到了这个限制,而且我们很努力。经过两年的 CI/CD 驱动开发,我们缺乏版本清理导致我们的开发完全陷入僵局过程。”
(强调我的)
关于我的架构。我有 lambda 函数,它们从存储在layers中的自制 python 包中调用方法。目标是避免在 lambda 中包含太多代码并轻松重用其中的功能。
现在,我找到了如何删除旧版本的 lambda 函数(我也在使用无服务器框架,它提供了一个很好的插件,可以在部署堆栈时自动修剪它们)。但是,我不知道 AWS 是否会自动删除旧层:我还没有找到一个可以汇总所有层版本的总代码大小的仪表板,也找不到自动删除它们的插件。
旧的 AWS Lambda 层会自动删除吗?如果没有,我怎么能批量删除它们?