我有一个lambda,它与其他功能一起,每天在每天早上5点上执行由CloudWatchEvents
触发的GET请求。
此服务在查询时间之前可能已经或可能没有我需要的数据。
因此,如果数据不存在,我需要重新调用lambda,比如说早上6点。如果仍然不存在,请在早上7点,依此类推。
我如何使用AWS基础设施来做到这一点?
答案 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,
)
我同意必须有某种适当的方法来执行此操作,但是此刻时间很短,并且需要投入生产。当没有数据要检索时,您可以执行类似的操作来重新计划您的计划,然后返回原始计划。