【问题标题】:AWS Lambda retry after certain timeAWS Lambda 在一定时间后重试
【发布时间】:2019-11-02 08:39:59
【问题描述】:

我有一个 lambda,它与其他事情一起执行 GET 请求,每天早上 5 点,在某些服务上,由CloudWatchEvents 触发。

此服务可能有也可能没有我在查询时需要的数据。

因此,如果数据不存在,我需要重新调用 lambda,比如说 6am。如果它仍然不存在,请在 上午 7 点再次进行,以此类推。

如何使用 AWS 基础设施实现这一目标?

【问题讨论】:

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


    【解决方案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,
            )
    

    我同意必须有一些适当的方法来做到这一点,但目前时间很短,并且 lambda 需要投入生产。当没有要检索的数据时,您可以做类似的事情来重新安排您的时间,然后回到原来的安排。

    【讨论】:

      【解决方案2】:

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

      步骤函数允许您使用 AWS 服务(包括允许决策分支和等待循环的 Lambda)创建工作流程。

      例如,您可以创建一个每天早上 5 点调用 lambda 的工作流,lambda 可以返回它是否可以处理数据或需要等待更多时间。 step 函数将检查结果并在处理数据后结束工作流,或者进入等待状态一小时,然后重试该函数。

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

      【讨论】:

        猜你喜欢
        • 2015-07-31
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2019-03-02
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多