Amazon web services 当AWS lambda函数超时时重试该函数的最佳解决方案
我有一个严肃的问题,我需要你的帮助。我花了很多时间在网上找不到任何解决办法 我制作了一个机器人来获取数据,这是一项非常繁重的任务,因为我需要设置一个刮板,然后它通过许多步骤(登录、注销、单击、提交按钮等)从网页中提取数据,在得到这个结果后,它将发布到API以生成报告 我使用Cloudwatch事件使lambda函数在每天的特定时间运行 问题是,虽然我将lambda函数设置为其最大设置(3GB内存,15分钟超时,指标在2019年1月),但有时我的lambda函数在执行时失败(可能是刮取任务需要太多步骤,或者可能是我尝试刮取的网页不稳定),而且很少失败,我认为只有5%左右Amazon web services 当AWS lambda函数超时时重试该函数的最佳解决方案,amazon-web-services,aws-lambda,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Amazon Cloudwatch,我有一个严肃的问题,我需要你的帮助。我花了很多时间在网上找不到任何解决办法 我制作了一个机器人来获取数据,这是一项非常繁重的任务,因为我需要设置一个刮板,然后它通过许多步骤(登录、注销、单击、提交按钮等)从网页中提取数据,在得到这个结果后,它将发布到API以生成报告 我使用Cloudwatch事件使lambda函数在每天的特定时间运行 问题是,虽然我将lambda函数设置为其最大设置(3GB内存,15分钟超时,指标在2019年1月),但有时我的lambda函数在执行时失败(可能是刮取任务需要太多
但是我想知道是否有任何方法可以处理这种情况,我希望我的lambda函数可以在失败时自动重试,而无需手动执行。您的lambda已经重试,因为cloudwatch事件的触发器是异步的。(见以下文件) 我会为你的lambda建立一个DLQ,然后从那里重新处理 从文件中() 给定事件源的错误处理取决于Lambda的调用方式。Amazon CloudWatch事件异步调用Lambda函数。有关如何重试错误的更多信息,请参阅AWS Lambda重试行为 及:() 异步调用–异步事件在用于调用Lambda函数之前排队。如果AWS Lambda无法完全处理事件,它将自动重试调用两次,两次重试之间会有延迟。如果已为函数指定死信队列,则失败事件将发送到指定的Amazon SQS队列或Amazon SNS主题。如果未指定死信队列(DLQ),该队列不是必需的,并且是默认设置,则该事件将被丢弃。有关更多信息,请参阅AWS Lambda函数死信队列
这是
StepFunction
的完美示例,您可以通过CloudWatch事件而不是lambda来安排它
StepFunction
可以调用lambda,并在出现故障时处理重试逻辑,如果需要,可以使用可配置的指数后退
下面是一个单步函数的示例
{
"Comment": "Call lambda with retry",
"StartAt": "Scraper",
"States": {
"Scraper": {
"Type": "Task",
"Resource": "<LAMBDA_ARN>",
"Retry": [
{
"ErrorEquals": [
"States.ALL"
],
"IntervalSeconds": 20,
"MaxAttempts": 5,
"BackoffRate": 2
}
],
"End": true
}
}
}
{
“注释”:“通过重试调用lambda”,
“StartAt”:“Scraper”,
“国家”:{
“刮刀”:{
“类型”:“任务”,
“资源”:“,
“重试”:[
{
“ErrorEquals”:[
“所有国家”
],
“间隔秒”:20,
“最大尝试”:5,
“回扣率”:2
}
],
“结束”:正确
}
}
}
您的lambda已经重试,因为cloudwatch事件的触发器是异步的=>这真的很奇怪,我不知道为什么,但有一天,我无法得到任何结果,因为我的函数在执行时失败了。===================================================================================================================================================================================================================================================================================================================================================================================================我会为你的lambda设置一个DLQ,然后从那里进行谴责。=>我会尝试一下,很快会反馈给你