标签: aws-lambda

重新部署期间正在运行的 AWS lambda 会发生什么情况?

如果我在旧版本运行时部署新版本的 lambda,会发生什么情况?

旧的有中断吗?还是会用新的来处理下一个事件,而旧的则像什么都没发生一样运行?

我找不到有关它的文档

aws-lambda

11
推荐指数
1
解决办法
3613
查看次数

如何减小 AWS Lambda 的打包 python zip 文件的大小

下午,

我最近遇到了 AWS Lambda 和 Azure Functions。AWS 对压缩和解压文件的大小施加了限制,对于 python 脚本需要包含所有依赖模块。我一直在使用 lambda-uploader 来打包我的脚本和它的模块依赖项,但是 pandas 包太大了。

我见过人们在 AWS Lambda 上完成机器学习和使用 Pandas 的例子(虽然有点过时),但我看不出他们是怎么做的。有什么建议?

python amazon-web-services aws-lambda

11
推荐指数
1
解决办法
9977
查看次数

在 Step Function 内循环

我试图在循环中调用步骤函数中的几个步骤,但我无法弄清楚我需要如何执行此操作。这是我现在所拥有的:我需要添加另一个 lambda 函数(GetReviews),然后它将循环调用 CreateReview、SendNotification。我该怎么做呢?我指的是“使用 Lambda 迭代循环”文档,它表明这是可能的。

阶跃函数定义:

{
  "Comment": "Scheduling Engine",
  "StartAt": "CreateReview",
  "States": {
    "CreateReview": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:.........:function:CreateReview",
      "Next": "CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateReviewResult",
      "OutputPath": "$"      
    },
    "CreateNotification": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-west-2:.........:function:CreateNotification",
      "InputPath": "$",
      "ResultPath": "$.CreateNotificationResult",
      "OutputPath": "$",
      "End": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

amazon-web-services aws-lambda aws-step-functions

11
推荐指数
3
解决办法
2万
查看次数

运行 AWS sam local invoke 时 Python 未找到模块

我刚刚开始使用 SAM 使用 AWS 无服务器并遇到以下问题:

SAM invoke 似乎找不到我的 lambda 处理程序正在导入的 python 模块,但我可以以其他方式导入该模块。

该结构我的项目是:

根目录/

  • 我的模块名称/
    • 我的模块.py
  • aws/
    • 山姆/
      • 模板.yaml
      • 打包的.yaml
      • myawsservice/
        • 应用程序
      • 测试/
        • 测试事件.json

我在 python3.6 虚拟环境中工作,我已经使用安装工具安装了我的 python 包(mymodulename):

python setup.py develop
Run Code Online (Sandbox Code Playgroud)

因此,如果我在虚拟环境中冻结 pip,我会看到:

Pillow==6.0.0
PyPDF2==1.26.0
reportlab==3.5.20
mymodulename==0.5.0
Run Code Online (Sandbox Code Playgroud)

另外如果我去:

cd root-dir/aws/sam/
python

>>> import mymodulename
Run Code Online (Sandbox Code Playgroud)

这成功了。所以它在python路径上。

但是当我在本地调用 sam 时,即:

sam local invoke MyAWSServiceFunction --event ../sam/test/test_event.json
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

2019-05-02 09:19:17 Found credentials in shared credentials file: ~/.aws/credentials
2019-05-02 09:19:18 Invoking app.lambda_handler (python3.6)

Fetching lambci/lambda:python3.6 Docker container image......
2019-05-02 …
Run Code Online (Sandbox Code Playgroud)

python-3.x aws-lambda aws-serverless

11
推荐指数
1
解决办法
4372
查看次数

AWS Lambda:无法导入模块“python_handler”:没有名为“_cffi_backend”的模块

当我需要读取 API 上的信息、创建 CSV 文件并将其上传到 SFTP 服务器时,我正在创建 AWS Lambda 函数。

\n\n

我已经在我的 venv 上安装了 paramiko,在 Windows 上使用 Ubuntu,并且 cffi 模块就像一个依赖项,但是当代码运行时,我收到此错误:

\n\n
{\n  "errorMessage": "Unable to import module \'python_handler\': No module named \'_cffi_backend\'",\n  "errorType": "Runtime.ImportModuleError"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

按照我的代码:

\n\n
{\n  "errorMessage": "Unable to import module \'python_handler\': No module named \'_cffi_backend\'",\n  "errorType": "Runtime.ImportModuleError"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

知道我该如何解决这个问题吗?

\n

python sftp paramiko aws-lambda

11
推荐指数
2
解决办法
2万
查看次数

AWS Lambda 中数据库代理的用途是什么?

我正在使用 AWS Lambda,并使用 node.js 集成了 SQL 服务器。这是它的例子。现在,我的问题是,AWS lambda 中的数据库代理是什么以及我如何从中受益?

谢谢

aws-lambda amazon-rds-proxy

11
推荐指数
1
解决办法
8125
查看次数

在 CDK 中配置 lambda 并发

我正在尝试通过 CDK 提供 lambda 并发性。我有几个 CfnFunctions,我需要配置它们。

只能在别名上进行配置。因此,当我将 autoPublishAlias 添加到 CfnFunction 时,APIG 触发器不起作用。

如何通过 CDK 实现(配置)供应?

谢谢,维诺德。

amazon-web-services aws-lambda serverless aws-cdk

11
推荐指数
2
解决办法
1万
查看次数

每次调用新的 Lambda 时,Mongoose 连接池都会创建与 Mongodb 的连接

我们使用 Mongoose、Nodejs、Serverless 和 AWS Lambda。为了使用相同的连接,而不是每次需要时打开和关闭连接,我创建了一个大小为 10 的连接池(这对于我们现在的用例来说似乎足够了)。

但问题是,当我看到 Lambda 的 Cloudwatch 日志时,发现所使用的连接并不相同。

每次调用新的 Lambda 时,都会创建一个新连接,而对该 Lambda 的后续调用将使用在第一次调用中打开的相同连接。

导致一次打开的连接数增加。在 MongoDB Atlas 上,我可以看到打开的连接数量非常多。

下面是我在没有可用缓存连接的情况下用于创建连接的代码。如果可用,将使用缓存的连接,并且不会创建新连接。

let cached_db;
exports.createConnection = async () => {
  if(cached_db == null){
    return await mongoose.connect(
    connection_uri,         
    { 'useUnifiedTopology': true , 
      'useNewUrlParser':  true, 
      'useFindAndModify': false , 
      'useCreateIndex': true,
      'socketTimeoutMS': 60000,
      'connectTimeoutMS': 60000,
      'poolSize': 10
    }
  ).then(conn => {
      cached_db = conn;
      return conn;
  }).catch((err) => {
      console.error('Something went wrong', err);
      throw err;
    });
  } else {
    console.log("Cached db in use."); …
Run Code Online (Sandbox Code Playgroud)

connection-pooling mongoose mongodb node.js aws-lambda

11
推荐指数
1
解决办法
3208
查看次数

使用自定义容器映像在本地测试 AWS lambda

我正在尝试测试使用自定义容器映像运行/调用的新添加功能lambda,因此我从AWS python:3.8基础映像构建一个非常简单的映像,如下所示:

\n
FROM public.ecr.aws/lambda/python:3.8\n\n\nCOPY myfunction.py ./\n\nCMD ["myfunction.py"]\n\n
Run Code Online (Sandbox Code Playgroud)\n

这是myfunction.py

\n
FROM public.ecr.aws/lambda/python:3.8\n\n\nCOPY myfunction.py ./\n\nCMD ["myfunction.py"]\n\n
Run Code Online (Sandbox Code Playgroud)\n

我的问题如下:构建完成后:

\n
docker build --tag custom .\n
Run Code Online (Sandbox Code Playgroud)\n

考虑到我没有公开任何 Web 端点并假设我正在成功地启动自定义容器,我现在如何调用我的 lambda(尽管就handler=我是否正确配置了处理程序而言,这部分有点令人不安)

\n
\xe2\x96\xb6 docker run -p 9000:8080 -it custom\nINFO[0000] exec \'/var/runtime/bootstrap\' (cwd=/var/task, handler=) \n
Run Code Online (Sandbox Code Playgroud)\n

简单的卷曲当然会失败

\n
\xe2\x96\xb6 curl -XGET http://localhost:9000                                                                                                                                                                       \n404 page not found\n
Run Code Online (Sandbox Code Playgroud)\n

amazon-web-services docker aws-lambda

11
推荐指数
1
解决办法
1万
查看次数

错误:/lib64/libc.so.6:找不到版本“GLIBC_2.28”(/var/task/cryptography/hazmat/bindings/_rust.abi3.so 需要)

我需要一个“傻瓜式”的答案来回答这个问题,我知道以前已经有人问过这个问题。

我们正在为 AWS 托管的应用程序使用无服务器框架。Runtime=python3.8 得到了一个不错的大 yml 文件,其中包含 16 个函数,其中 2 个包含用于密码学和 PyNaCl 的层,我们从这里引入 - https://github.com/keithrozario/Klayers并已成功使用了相当长一段时间。

上周,我需要更新一个不同的函数,这意味着重新测试,这意味着发现有更新版本的加密层,所以我将其更新为 Cyptography v.39。现在我有一个函数失败并出现错误,/lib64/libc.so.6: version `GLIBC_2.28' not found (required by /var/task/cryptography/hazmat/bindings/_rust.abi3.so)该函数自 07/2022 以来一直没有使用过,当时它很好。显然,距离我们从无服务器重新部署以来也已经过去了很长时间。

尝试修复:

这个问题Lambda function failed with /lib64/libc.so.6: version `GLIBC_2.18' not find包括从 Cryptography v.39 一直回到 v.3.4.7 (from 03/2021) 的建议,这似乎是个坏建议。当然,这两个版本之间的 14 次更新包括一些重要的变化。

我不知所措。我觉得我只是在原地踏步,同时无法在我尝试更新的实际功能上取得进展,因为这是一个障碍。

python aws-lambda

11
推荐指数
1
解决办法
2万
查看次数