一定时间后重试AWS Lambda

时间:2019-06-19 14:48:43

标签: amazon-web-services aws-lambda amazon-cloudwatch

我有一个lambda,它与其他功能一起,每天在每天早上5点上执行由CloudWatchEvents触发的GET请求。

此服务在查询时间之前可能已经或可能没有我需要的数据。

因此,如果数据不存在,我需要重新调用lambda,比如说早上6点。如果仍然不存在,请在早上7点,依此类推。

我如何使用AWS基础设施来做到这一点?

2 个答案:

答案 0 :(得分:2)

这似乎是Step Functions的一个很好的用例。

Step函数使您可以使用包括Lambda在内的AWS服务创建工作流,该工作流允许决策分支和等待循环。

例如,您可以创建一个工作流程,该工作流程每天凌晨5点在调用lambda的情况下调用,lambda可以返回它是否可以处理数据或需要等待更多时间。步骤功能将检查结果,并自处理数据以来结束工作流,或进入等待状态一个小时,然后重试该功能。

Check out this article that includes code samples for a workflow that is similar to yours.

答案 1 :(得分:1)

我遇到了类似的情况,我的lambda需要在周末更改时间表,这就是我解决的方法。

def lambda_handler(event, context):
    reschedule_event()
    keep_working()

REGULAR_SCHEDULE = 'rate(20 minutes)'
WEEKEND_SHEDULE = 'rate(1 hour)'
RULE_NAME = 'My Rule'

def reschedule_event():
    """
    Cambia la planificación de la lambda, para que descanse los findes :D
    """
    sched = boto3.client('events')
    current = sched.describe_rule(Name=RULE_NAME)
    if is_weekend() and 'minutes' in current['ScheduleExpression']:
        sched.put_rule(
            Name=RULE_NAME,
            ScheduleExpression=WEEKEND_SCHEDULE,
        )
    if not is_weekend and 'hour' in current['ScheduleExpression']:
        sched.put_rule(
            Name=RULE_NAME,
            ScheduleExpression=REGULAR_SCHEDULE,
        )

我同意必须有某种适当的方法来执行此操作,但是此刻时间很短,并且需要投入生产。当没有数据要检索时,您可以执行类似的操作来重新计划您的计划,然后返回原始计划。