标签: aws-lambda

从lambda函数对dynamodb的请求非常慢

我在同一区域(us-east-1)有lambda函数和dynamo db表.在lambda函数中,我执行非常简单的查询:

params =
  TableName: 'users'
  Item:
    email:
      S: event.body.email
  ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)
Run Code Online (Sandbox Code Playgroud)

DynamoDB表中只有几行,电子邮件上有Hash Key,读取/写入吞吐量设置为5/5.

Lambda函数在~4秒内完成...这非常慢.难道我做错了什么?


我已经使用lambda函数的不同内存设置测试了我的函数(以前设置为128mb):

  • 256mb => ~2000ms
  • 512mb => ~1000ms
  • 1024mb => ~500ms
  • 1536mb => ~300ms

因此,似乎响应时间取决于内存(实际上在计算容量上,因为AWS会将其与内存一起扩展).仍然这很疯狂,因为要制作非常简单的REST API,我必须设置1536mb内存以使其"响应",而我的程序使用17mb!


嗯,另一方面,我已经计算出它会花费:

  • 使用128mb内存,每1百万4000毫秒请求8.32美元
  • 10.004 $每100毫秒300毫秒请求使用1536mb内存

所以我猜不是那么糟糕......

amazon-web-services amazon-dynamodb aws-lambda

21
推荐指数
1
解决办法
5174
查看次数

访问AWS lambda中的本地文件系统

是否可以在AWS lambda函数中访问本地文件系统?如果是这样,这样做有什么不利之处吗?

aws-lambda

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

使用boto调用lambda函数我该如何异步执行?

所以我正在使用boto来调用我的lambda函数并测试我的后端.我想异步调用它们.我注意到"invoke_async"已弃用,不应使用.相反,您应该使用InvocationType为"Event"的"invoke"来异步执行该函数.

我似乎无法弄清楚如何在函数返回时从函数中获取响应.我尝试过以下方法:

payload3=b"""{
"latitude": 39.5732160891,
"longitude": -119.672918997,
"radius": 100
}"""

client = boto3.client('lambda')
for x in range (0, 5):
    response = client.invoke(
        FunctionName="loadSpotsAroundPoint",
        InvocationType='Event',
        Payload=payload3
    )
    time.sleep(15)
    print(json.loads(response['Payload'].read()))
    print("\n")
Run Code Online (Sandbox Code Playgroud)

即使我告诉代码睡眠15秒,当我尝试打印它时,响应变量仍然是空的.如果我将invokation Invokation类型更改为"RequestResponse",它一切正常并且响应变量打印,但这是同步的.我错过了一些容易的事吗?当async invokation返回时,我如何执行一些代码,例如打印出结果?

谢谢.

python boto amazon-web-services aws-lambda

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

AWS Event Bridge Lambda 调用

我已将 lambda 函数配置为 EventBridge 规则目标,并在 EventBridge 规则上配置了死信队列以捕获异常。现在,如果 lambda 函数失败,Event Bridge 不会将该失败识别为错误。由于 EventBridge 对 Lambda 的调用是异步的,因此对于 EventBridge 来说,到达 lambda 就足以将事件视为成功,但这样一旦 lambda 失败,我就无法跟踪和重试事件。任何人都知道一种方法可以使 EventBridge 与 Lamdba 请求同步,或者知道另一种方法,以便在 Lambda 代码在调用后失败时能够重试事件?

aws-lambda aws-event-bridge

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

如果我使用 ECR 映像/容器,AWS Lambda 函数的冷启动会花费更长的时间吗?

如果我使用 ECR 中的图像而不是 S3 中的 jar 作为源代码,AWS Lambda 函数的冷启动是否会花费更长的时间?我认为是的,因为由于额外的操作系统层,图像更大(尽管......常规 Lambda 也应该有一些操作系统层),但我找不到任何性能基准。

谢谢!

amazon-web-services aws-lambda amazon-ecr

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

构建基本 Web 应用程序教程中的 AWS Lambda“找不到模块 aws-sdk”

我尝试从头开始运行构建基本 Web 应用程序教程来开始使用 AWS。我想我可以一步一步地遵循它,并有一个简单的 Hello World 网页前端到一个小数据库。但我遇到了一个奇怪的错误:包括最基本的错误,默认aws-sdk模块失败了!

简洁版本:

这段代码:

// Include the AWS SDK module
const AWS = require('aws-sdk');
Run Code Online (Sandbox Code Playgroud)

生成此错误:Error: Cannot find module 'aws-sdk'

很长的故事:

我正在逐步遵循该流程,使用 AWS 在线工具创建所有部分。当我创建 Lambda 函数时,第一个麻烦发生了。我不太担心 Create Function 工具显示 Node.js 版本 18.x 而不是教程的 Node.js 16.x,但我确实注意到它生成的 Lambda shell 被命名index.mjsindex.js. 没问题,我将使用该文件。我用亚马逊的HelloWorld代码替换了内容。

// Define handler function, the entry point to our code for the Lambda service
// We receive the object that triggers the function as a parameter
exports.handler = …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services node.js amazon-dynamodb aws-lambda

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

aws-lambda无法找到模块

从zip文件上传代码时,我在aws-lambda控制台中不断收到此错误.我尝试上传其他zip文件,但它们正常工作..js文件在zip文件中名为"CreateThumbnail.js".我相信处理程序也正确命名为"CreateThumbnail.handler".node_modules子目录也已设置.任何人都有任何想法?

{
  "errorMessage": "Cannot find module 'CreateThumbnail'",
  "errorType": "Error",
  "stackTrace": [
  "Function.Module._resolveFilename (module.js:338:15)",
  "Function.Module._load (module.js:280:25)",
  "Module.require (module.js:364:17)",
  "require (module.js:380:17)"
  ]
}
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services node.js aws-lambda

20
推荐指数
5
解决办法
3万
查看次数

AWS Lambda的源代码管理和部署

有没有人想出一个很好的源代码控制解决方案并将代码部署到AWS Lambda?我真的很讨厌我必须一直压缩文件并上传它们.有没有更好的方法来做这个也许是一个根据Lambda的变化推送代码的服务?

amazon-web-services aws-lambda

20
推荐指数
1
解决办法
3883
查看次数

如何在AWS Lambda上使用环境变量?

我正在编写一个我希望作为AWS Lambda函数运行的应用程序,但也遵守Twelve-Factor应用程序指南.特别是第三部分.配置需要使用环境变量进行配置.

但是,我找不到为AWS Lambda实例设置环境变量的方法.谁能指出我正确的方向?

如果无法使用环境变量,请推荐一种方法来使用环境变量进行本地开发,并将它们转换为可以使用AWS中的应用程序代码访问的有效配置系统.

谢谢.

environment-variables amazon-web-services aws-lambda

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

如何使来自 Lambda 的批处理中的特定 SQS 消息失败?

我有一个带有 SQS 触发器的 Lambda。当它被击中时,来自 SQS 的一批记录进来(我认为通常一次大约 10 个)。如果我从处理程序返回失败的状态代码,将重试所有 10 条消息。如果我返回成功代码,它们都会从队列中删除。如果这 10 条消息中有 1 条失败,而我只想重试那一条怎么办?

exports.handler = async (event) => {

    for(const e of event.Records){
        try {
            let body = JSON.parse(e.body);
            // do things
        }
        catch(e){
            // one message failed, i want it to be retried
        }        
    }

    // returning this causes ALL messages in 
    // this batch to be removed from the queue
    return {
        statusCode: 200,
        body: 'Finished.'
    };
};
Run Code Online (Sandbox Code Playgroud)

我是否必须手动将该消息重新添加回队列?或者我可以从我的处理程序返回一个状态,指示一条消息失败并应该重试?

amazon-sqs amazon-web-services node.js aws-lambda

20
推荐指数
2
解决办法
6362
查看次数