问题标签 [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 回答
1135 浏览

python-3.x - 为什么在使用 AWS Lambda 层与 AWS SAM 部署包时存在大小差异

我正在研究一个需要导入SciPypyarrow. 由于有一个官方的 AWS 层包含SciPy-AWSLambda-Python38-SciPy1x:14它在函数中使用。pyarrow包含在awswrangler已经创建的层中,以在先前制作的 Lambda 中使用。

AWS SAM用于打包和部署函数。awswrangler现在,将层的内容复制到可以正确部署和执行的部署包目录与函数中同时使用SciPy和层之间存在一个非常有趣的区别awswrangler。如果两个层都使用,执行sam deploy会出现以下错误:

需要注意的一点是,awswrangler层内容复制到部署包时,与现有内容没有重叠,所以部署包并没有变小,因为它已经包含了一些awswrangler使用的包。

0 投票
3 回答
1710 浏览

javascript - 放大:如何从 lambda 层要求/导入自定义函数?

我有一个 Amplify 项目,我想在其中使用 lambda 层。层和 lambda 已使用 Amplify CLI 进行配置。

Lambda 层命名为“common”。该文件是./amplify/backend/function/common/opt/param.js. 它导出一个函数:

在我的 lambda 函数中,我想使用上面的辅助函数。但是,我不知道如何导入它。我努力了:

但它们都因错误而失败,例如:

另请注意,在推送图层并将其连接到最新的图层版本后,我已经更新了 lambda。所以代码应该可用于 lambda。

0 投票
2 回答
274 浏览

amazon-web-services - 使用 Lamda 层在 aws lambda 中部署 Pytidylib 模块

我正在尝试使用 layers 将 pytidylib python 模块部署到 AWS lambda 函数中。我已经按照 aws 文档中的描述创建了路径并创建了新层。现在 pytidylib 的代码需要 /usr/lib 中的一些库,但我已经在 /python/lib/python3.7/site-packages/ 中安装了库,所以为了解决这个问题,我在 aws linux 服务器平台的 environ PATH 中添加了路径,但问题仍然没有解决。以下是我的代码:-

我想了解有什么方法可以通过代码中的一些更改来完成这项工作,并使 pytidylib 模块通过层运行。以下是错误:-

0 投票
1 回答
207 浏览

python - 将包添加到 AWS lambda 中的现有层

我的工作 AWS 帐户中有一个层,其中包含许多 python 库,如 pandas、numpy、sqlalchemy 等。它的文件夹结构为

我想将我的自定义包也添加到这一层。我怎么做?

0 投票
3 回答
3580 浏览

amazon-web-services - 配置 AWS Lambda 函数以使用最新版本的层

我在开发应用程序中有 20 多个 lambda 函数。还有一个包含大量通用代码的 lambda 层。

一个 Lambda 函数,将它与层的特定版本挂钩,每次更新层时,它都会生成一个新版本。由于它是一个开发应用程序,我几乎每天都有一个新版本的层。这会在每天必须触及的 lambda 函数上造成混乱 - 以升级层版本。

我知道在生产中冻结 lambda 函数的代码很重要,并且必须将 lambda 函数的一个版本挂钩到层的一个版本。

但是,对于开发环境,是否可以防止每次更新图层时生成新的图层版本?或者配置 lambda 函数,让最新的 lambda 版本总是指最新的 layer 版本?

0 投票
0 回答
539 浏览

aws-lambda - AWS SAM 模板的本地工作流程是什么,它在 zip 文件中包含具有 python 依赖项的层

当我的 SAM 模板文件在本地 zip 文件中包含具有依赖关系的层时,我在本地调用 lambda 时遇到问题。调用成功,但函数引发错误,指出缺少依赖项。

在阅读有关 的文档时AWS::Serverless::LayerVersion,它指出如果ContentUri是本地 zip 文件,我应该首先运行sam package. 这将正确地转换图层。我应该在sam package之前运行sam build,还是改为运行?这似乎很奇怪,因为sam package需要一个 S3 存储桶,这会破坏本地构建/调用工作流程

这是我正在运行的步骤(和模板文件)

模板.yaml

simple_app.py(my_service压缩包./layers/deps.zip

运行以下命令时无法执行我的功能:

  1. sam build --template sam_template.yaml --use-container
  2. sam local invoke SimpleLambda --template sam_template.yaml --skip-pull-image 错误:[ERROR] Runtime.ImportModuleError: Unable to import module 'simple_app': No module named 'my_service'--> 依赖项不存在

如果我运行sam package --s3-bucket <my_bucket_name> --template sam_template.yaml instead (or before sam build , package succeeds and return back template yaml with layerContentUri: s3://<my_bucket_name>/28d65cb9855cad7b8b41de3558c17baa`

我尝试ContentUri: ./layers/deps.zip在我的模板中替换为ContentUri: s3://<my_bucket_name>/28d65cb9855cad7b8b41de3558c17baa,但会打印出如下消息:Lambda function 'DepsLibs' has specified S3 location for CodeUri which is unsupported. Using default value of '.' instead

具有上述图层的模板的本地工作流程是什么?

0 投票
2 回答
128 浏览

python - AWS Lambda 调用另一个 lambda 然后解析

第一行是在“RequestResponse”类型中调用另一个 lambda 后记录的响应的一部分。

以下代码返回 null

返回响应的调用 lambda 运行正确。

非常感谢任何帮助。

谢谢,


如果您的 lambda 可以直接调用 AWS 上的传出 Internet 连接,则使用 boto3 调用另一个 lambda 有效,但如果您的 VPC 没有附加 IG,则 boto3 调用另一个 lambda 不起作用。如果是这种情况,请将被调用的 lambda 设置为内部私有 api 网关端点,并在您的调用 lambda 上调用此端点。

0 投票
1 回答
2115 浏览

python - 无法使用 python 库:'paramiko' 与 AWS Lambda

我正在尝试将文件传输到远程服务器,为此我正在使用paramiko库。通过在本地运行 python 脚本,我能够成功地将文件传输到远程服务器。我正在使用的脚本如下:

我需要在 AWS Lambda 上运行这个脚本。但是,当我在 AWS Lambda 上运行此脚本时,它给了我以下错误。

在此处输入图像描述

根据 Paramiko 文档,它几乎没有直接依赖关系,bcrypt就是其中之一。

我通过上传包含所有相关模块的 zip 文件创建了一个 Lambda 层(pip install paramiko -t 。),并且还按照 python3.7 要求遵循了文件夹结构(python/lib/python3.7/site-packages /)

我在网上做了很多研究,但没有找到可以解决问题的解决方案。

请帮我!

0 投票
2 回答
3633 浏览

aws-lambda - 用于 psycopg2 的 AWS Lambda 层

我正在尝试创建一个新的 lambda 层以使用 psycopg2 导入 zip 文件,因为该库使我的部署包超过 3MB,并且我再也看不到 lambda 函数中的内联代码。

我使用 Python 3.7 为以下两种情况创建了 lambda 层:

  • psycopg2_lib.zip(包含 psycopg2、psycopg2_binary.libs 和 psycopg2_binary-2.8.5.dist-info 文件夹)
  • psycopg2_only.zip 仅包含 psycopg2 文件夹。

我将他们新创建的层添加到我的 lambda 函数中。但是,在这两种情况下,我的 lambda_function 都会引发如下错误: { "errorMessage": "Unable to import module 'lambda_function': No module named 'psycopg2'", "errorType": "Runtime.ImportModuleError" }

该错误似乎是我的 zip 文件出了问题,无法识别它们。但是当它在我的部署包中运行良好时。

任何帮助或理由都会非常感激。谢谢!

0 投票
0 回答
163 浏览

aws-lambda - 获取供应商层的 ARN

看起来像 AWSLambda-Python37-SciPy1x 这样的 AWS 层在不同区域的 ARN 中有不同的账户和头版本。例如

  • us-east-1: arn:aws:lambda:us-east-1:668099181075:layer:AWSLambda-Python37-SciPy1x:22
  • us-east-2: arn:aws:lambda:us-east-2:259788987135:layer:AWSLambda-Python37-SciPy1x:20

从脚本中,我需要添加与 lambda 区域相关的层,但我没有找到 AWS CLI 或 boto3 命令可以为我提供“已发布”层的 ARN(即由所有帐户的 AWS 管理员),我只能找到我自己的层(例如aws lambda list-layers)。

Web 浏览器中 lambda 的 AWS 控制台显示了供应的层,因此我加载了页面并查看了 js 控制台并看到了以下请求:

所以看起来 REST API 有这个操作来获得它,但我在 AWS CLI 或 boto3 的任何地方都找不到等价物。

任何想法(没有使用带有正确请求头和身份验证信息的 curl,痛苦),也许是一种在 boto3 中运行“原始”请求的方法,以便我可以给它这个listAwsVendedLayers操作?我查看了文档找不到任何东西。