如果我在旧版本运行时部署新版本的 lambda,会发生什么情况?
旧的有中断吗?还是会用新的来处理下一个事件,而旧的则像什么都没发生一样运行?
我找不到有关它的文档
下午,
我最近遇到了 AWS Lambda 和 Azure Functions。AWS 对压缩和解压文件的大小施加了限制,对于 python 脚本需要包含所有依赖模块。我一直在使用 lambda-uploader 来打包我的脚本和它的模块依赖项,但是 pandas 包太大了。
我见过人们在 AWS Lambda 上完成机器学习和使用 Pandas 的例子(虽然有点过时),但我看不出他们是怎么做的。有什么建议?
我试图在循环中调用步骤函数中的几个步骤,但我无法弄清楚我需要如何执行此操作。这是我现在所拥有的:我需要添加另一个 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)
我刚刚开始使用 SAM 使用 AWS 无服务器并遇到以下问题:
SAM invoke 似乎找不到我的 lambda 处理程序正在导入的 python 模块,但我可以以其他方式导入该模块。
该结构我的项目是:
根目录/
我在 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) 当我需要读取 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}\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n\n知道我该如何解决这个问题吗?
\n我正在使用 AWS Lambda,并使用 node.js 集成了 SQL 服务器。这是它的例子。现在,我的问题是,AWS lambda 中的数据库代理是什么以及我如何从中受益?
谢谢
我正在尝试通过 CDK 提供 lambda 并发性。我有几个 CfnFunctions,我需要配置它们。
只能在别名上进行配置。因此,当我将 autoPublishAlias 添加到 CfnFunction 时,APIG 触发器不起作用。
如何通过 CDK 实现(配置)供应?
谢谢,维诺德。
我们使用 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) 我正在尝试测试使用自定义容器映像运行/调用的新添加功能lambda,因此我从AWS python:3.8基础映像构建一个非常简单的映像,如下所示:
FROM public.ecr.aws/lambda/python:3.8\n\n\nCOPY myfunction.py ./\n\nCMD ["myfunction.py"]\n\nRun Code Online (Sandbox Code Playgroud)\n这是myfunction.py
FROM public.ecr.aws/lambda/python:3.8\n\n\nCOPY myfunction.py ./\n\nCMD ["myfunction.py"]\n\nRun Code Online (Sandbox Code Playgroud)\n我的问题如下:构建完成后:
\ndocker build --tag custom .\nRun Code Online (Sandbox Code Playgroud)\n考虑到我没有公开任何 Web 端点并假设我正在成功地启动自定义容器,我现在如何调用我的 lambda(尽管就handler=我是否正确配置了处理程序而言,这部分有点令人不安)
\xe2\x96\xb6 docker run -p 9000:8080 -it custom\nINFO[0000] exec \'/var/runtime/bootstrap\' (cwd=/var/task, handler=) \nRun Code Online (Sandbox Code Playgroud)\n简单的卷曲当然会失败
\n\xe2\x96\xb6 curl -XGET http://localhost:9000 \n404 page not found\nRun Code Online (Sandbox Code Playgroud)\n 我需要一个“傻瓜式”的答案来回答这个问题,我知道以前已经有人问过这个问题。
我们正在为 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 次更新包括一些重要的变化。
我不知所措。我觉得我只是在原地踏步,同时无法在我尝试更新的实际功能上取得进展,因为这是一个障碍。
aws-lambda ×10
python ×3
aws-cdk ×1
docker ×1
mongodb ×1
mongoose ×1
node.js ×1
paramiko ×1
python-3.x ×1
serverless ×1
sftp ×1