EventBridge是AWS中有效的工具,可以帮助我们自动化任务。但是,当您需要具有动态时间表时,可能会很棘手。
首先, boto3 不是Lambdas上的最新运行。 2023年1月16日在上可用于 python 3.9 , 1.20.32 (print(boto3.__version__)
),最新发布的是 1.26。 50 :
https://github.com/boto/boto3
因此,您必须执行额外的步骤将其拉链并将其添加为一层:
-
安装boto3到 /python目录
$ pip install boto3 -t ./python
-
拉链
$ zip -r layer.zip ./python
-
将其上传到AWS作为图层并进行配置:
https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
完成此操作后,您需要创建一个与我共享的代码相似的lambda函数:
import json
import boto3
from datetime import datetime, timedelta
scheduler_client = boto3.client('scheduler')
#schedule the EventBridge Schedule to run 5 min from now
schedule_time = datetime.now() + timedelta(minutes=5)
#these values come from the EventBridge schedule itself
event_scheduler_name = 'MY_EVENT_NAME'
target_arn = 'MY_TARGET_ARN' #It comes from
role_arn = 'MY_ROLE_ARN'
def lambda_handler(event, context):
scheduler_client.update_schedule(Name=event_scheduler_name,
ScheduleExpression=f'cron({schedule_time.minute} {schedule_time.hour} {schedule_time.day} {schedule_time.month} ? {schedule_time.year})',
FlexibleTimeWindow={
'MaximumWindowInMinutes': 1,
'Mode': 'FLEXIBLE'
},
Target={
'Arn': target_arn,
'RoleArn': role_arn
})
return {
'statusCode': 200,
'body': json.dumps('Working!')
}
棘手的值, arn 和 rolearn 来自Eventbridge时间表:
现在,您已经准备好使用Python创建动态时间表。
横幅学分: