问题标签 [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.

0 投票
1 回答
370 浏览

python - gspread-pandas 作为 AWS Lambda 中的层

所以我尝试在 AWS Lambda 的一个层中设置包,以便稍后在函数中使用它。不幸的是,我似乎无法使 env 变量工作或正确设置它,以便它可以读取 google_secret.json

准备 lambda 包我:

  1. 创建了一个 EC2 实例
  2. 创建本地目录:build/python/lib/python3.7/site-packages
  3. 安装了我在该目录中使用的所有软件包,包括 gspread_pandas
  4. 压缩python目录
  5. 将其上传到 S3,然后将其用作图层

该过程适用于除此之外的所有其他包,因为我没有指向 google_secret.json 的配置

作为修复,我尝试:

  1. 将此配置文件中的路径更改 为我在存储 google_secret.json_default_dir = ( Path(environ.get("$XDG_CONFIG_HOME", Path(environ.get("HOME")) / ".config")) / "gspread_pandas"的 python 目录(已压缩)中创建的路径:"python/config/gspread_pandas/"
  2. 在 lambda 函数中创建文件 google_secret.json,创建环境变量"GSPREAD_PANDAS_CONFIG_DIR"并将其设置为文件的路径

不幸的是,上述方法均无效。

在这两种情况下,我都会收到以下错误

我不得不提一下,我没有太多的编码经验,所以我提前为糟糕的解释道歉。

任何帮助将不胜感激!

0 投票
4 回答
2529 浏览

amazon-web-services - AWS:删除 lambda 层仍保留层版本历史

我正在使用 aws cli 部署 AWS Lambda 层:

我删除它使用

删除成功,确保不存在其他版本的图层。

在下一次发布该层时,它仍然保留以前版本的历史记录。从我读到的如果不存在层版本并且不存在参考,版本历史应该消失了,但我没有看到。有人有解决方案来硬删除带有版本的图层吗?

0 投票
1 回答
845 浏览

curl - 如何在 Lambda for Node 12.x (Amazon2) 中获取 curl

Lambda 中的新nodejs运行时基于未预安装的 Amazon2 curl。因此curl: command not found在尝试使用它时给出一个。

我如何curl回到新的nodejs 10.x and 12.x运行时?

我找不到curllambda 层。

0 投票
1 回答
1123 浏览

node.js - 如何使用无服务器框架正确部署 Lambda 层

我正在尝试使用无服务器框架在 AWS 中配置和部署一些层。
图层文件所在的目录结构如下:

我的serverless.yml文件看起来像这样

我运行sls deploy,我可以看到该层已部署,但是当我尝试从我的 Lambda 中的层中的文件访问函数时,如下所示:
const index = require('/opt/nodejs/index');
我的 Lambda 崩溃并抱怨索引模块不存在。

当我压缩图层内容并将它们手动上传到 AWS 时,一切正常。


我尝试过的事情:
-serverless.yml进入 nodejs 目录并从那里部署,但这给了我以下错误:
No file matches include / exclude patterns

0 投票
2 回答
449 浏览

javascript - 如何在上传 AWS Lambda 层时更改对它的引用?

我正在使用 AWS Lambda 层来保留一些 node_modules 以及我自己的一些帮助函数,我将它们存储在一个名为helpers. 从 AWS 文档中,我看到要引用我必须做的层中的助手

但是目前在我的代码中,我将其作为

我想保持这种方式,以便我能够在本地运行。有没有办法保留第二条路径,并且仅在我上传代码时将其更改为第一个路径(我aws lambda update-function-code从 CLI 使用)?

0 投票
1 回答
1688 浏览

typescript - 如何使用打字稿设置自定义 node_modules 路径

我开始在 TypeScript 中开发 AWS Lambda 函数。我希望node_modules目录位于子目录中,以便能够管理层中的所有依赖项。所以我有以下结构:

我使用相对进口,my_own_dependencies效果很好。

但是我无法tsc导入节点模块,无论模块是什么,我总是得到error TS2307: Cannot find module 'xxxx'. 使用相对导入也无济于事,因为如果一个模块本身依赖于另一个模块,仍然会抛出错误。

我尝试了各种compilerOptions参数组合(baseUrlpathsrootDirstsconfig.json但它们都没有真正起作用。

现在我的 tsconfig.json 看起来像这样:

编辑:运行tsc --traceResolution blah/blah.ts输出以下内容:

奇怪的是它说模块解析类型是未定义的,而它被明确定义为“节点” tsconfig.json...

谢谢你的帮助!

0 投票
1 回答
7264 浏览

amazon-web-services - 调用 API“找不到模块”时出现 AWS lambda 层错误

我尝试使用 AWS Lambda 层,观看了有关它的教程,但我收到错误“找不到模块...”

当我部署它时,我的终端没有任何错误,在 AWS 上,我看到了我的层,当我下载它时,我有我package.json的时刻依赖,以及 node_modules 文件夹和时刻

我的 handler.js 看起来像这样:

我的文件结构:

你知道我做错了什么吗?

0 投票
1 回答
3004 浏览

python - pysftp 库在 AWS lambda 层中不起作用

我想使用pysftp库(Python 脚本)将文件上传到 EC2 实例。所以我创建了一个小的 Python 脚本,它使用下面的行来连接

该脚本将使用 .pem 文件将文件从我的本地 Windows 机器上传到 EC2 实例,并且它可以正常工作。

现在我想使用具有 API Gateway功能的 AWS lambda来执行此操作。

所以我已经将 Python 脚本上传到 AWS lambda。现在我不确定如何在 AWS lambda 中使用 pysftp 库,所以我找到了在 AWS lambda 层中添加 pysftp 库层的解决方案。我做到了

pip3 安装 pysftp -t ./library_folder

我制作了上述文件夹的 zip 并添加到 AWS lambda 层。

但是我仍然遇到了很多错误,例如一一:-

没有名为“pysftp”的模块

没有名为“paramiko”的模块

未定义符号:PyInt_FromLong

无法从部分初始化的模块“bcrypt”导入名称“_bcrypt”(很可能是由于循环导入)

未找到 cffi 模块

我只是淡化了上述错误,我没有找到合适的解决方案。如何在我的 AWS lambda 中无缝使用 pysftp 库?

0 投票
1 回答
334 浏览

python - 使用运行时 3.6 层的 python 运行时 3.7 的 AWS lambda

我有以下内容:
1.运行时python 3.6的AWS(lambda)层。
2. 使用上述层的runtime python 3.7的一个lambda函数。

该层将其模块打包在一个带有所需层次结构的 zip 中"python/lib/python3.6/site-packages"

问题是 lambda 函数找不到(即无法导入)层模块,除非我明确地做类似的事情:sys.path.append('/opt/python/lib/python3.6/site-packages'),我觉得这是一种解决方法。

我希望 aws lambda 框架能够顺利地允许 3.7 运行时从版本 < 3.7 的层导入模块。(通过添加匹配的 python 路径或其他方式)。

有没有我错过的方式?

谢谢。

0 投票
1 回答
647 浏览

node.js - AWS Lambda:NodeJs 自定义层

我是 nodejs 和 aws lambda 的新手。我正在尝试为我的一堆 lambda 函数创建具有常用函数的层。在 lambda 处理程序中,自定义模块的导入具有以下定义: let commonService = require('@common/service');

带有模块文件的 zip 具有以下结构:

但我得到了错误: "errorMessage": "Error: Cannot find module '@common/service'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js",

@custom/service模块 package.json 包含以下内容:

提前致谢!