我希望能够设置一个时间来调用AWS Lambda函数,然后再调用该函数。例如,我希望我的Lambda函数在2017年12月19日晚上9点运行。我不希望它重复,我现在不想让它现在调用,就在晚上9点19。
据我所知,CloudWatch提供了预定事件,我想当输入安排此提醒的时间时,会创建一个CloudWatch预设事件,以便在此后的一段时间内启动(如果您安排在晚上8:22运行在晚上9点,这将是38分钟),然后它在晚上9点调用Lambda函数,然后删除CloudWatch预定事件。我的问题是,当创建CloudWatch Scheduled Event时,它会立即执行,然后以指定的时间间隔执行。
任何其他想法都会受到赞赏,因为我无法想到另一种解决方案。提前谢谢!
答案 0 :(得分:12)
您可以使用以下语法安排lambda事件:
cron(Minutes Hours Day-of-month Month Day-of-week Year)
注意 :所有字段都是必填字段,时区仅限UTC
请参阅此AWS Documentation了解详情。
由于
答案 1 :(得分:3)
您可以安排一个步进函数,该函数可以等到特定时间点再使用任意有效载荷调用lambda。
https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html
类似这样的东西
const stepFunctions = new AWS.StepFunctions()
const payload = {
stateMachineArn: process.env.SCHEDULED_LAMBDA_SF_ARN,
name: `${base64.encode(email)}-${base64.encode(timestamp)}`, // Dedupe key
input: JSON.stringify({
timestamp,
lambdaName: 'myLambdaName',
lambdaPayload: {
email,
initiatedBy
},
}),
}
await stepFunctions.startExecution(payload).promise()
答案 2 :(得分:1)
我很晚才回答这个问题。但是任何只想使用CRON表达式来触发事件(或调用API)的人都可以使用以下示例:
此事件仅在格林尼治标准时间2025年1月1日-12:00:00 GMT触发一次
00 12 01 01 ? 2025
对于那些不了解cron语法的人:
Minutes Hours DayOfMonth Month DayOfWeek Year
我正在AWS Cloudwatch Events上使用它,结果看起来像这样:
注意:我没有指定星期几,因为我给了它固定的日期,这很明显。
答案 3 :(得分:0)
通过事件调用lambda函数是异步调用选项。通过使用CloudWatchEvent触发Lambda函数,我们可以使用cron作业,但是仍然存在问题,因为Lambda函数针对相同的cron时间表多次触发。 https://cloudonaut.io/your-lambda-function-might-execute-twice-deal-with-it/
但这需要在您的帐户中实现Dynamo DB,然后使Lambda函数幂等。
答案 4 :(得分:0)
您可以使用DynamoDB TTL
功能轻松实现此目的,只需执行以下操作:
1-使用TTL
放置项目,这是您要执行或调用lambda函数的确切时间。
2-将DynamoDB Streams
配置为在项目的remove
事件上触发lambda函数。
项目/记录即将到期时,您的lambda将被调用。您无需删除或清理任何东西,因为dynamodb中的项目已经消失。
注意:但是,该方法易于实施且可很好地扩展,但是有一个预防措施值得一提:使用DynamoDB TTL
作为调度机制不能保证精确的时间精度,因为可能会有延迟。计划的任务将在几分钟后执行。
答案 5 :(得分:0)
如果有人在将来在特定时间触发特定事件并使用特定数据,我发现这非常有帮助!
https://dev.to/byrro/how-to-schedule-any-task-with-aws-lambda-3617