仅在指定的未来时间调用AWS Lambda函数一次

时间:2017-12-19 05:48:15

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

我希望能够设置一个时间来调用AWS Lambda函数,然后再调用该函数。例如,我希望我的Lambda函数在2017年12月19日晚上9点运行。我不希望它重复,我现在不想让它现在调用,就在晚上9点19。

据我所知,CloudWatch提供了预定事件,我想当输入安排此提醒的时间时,会创建一个CloudWatch预设事件,以便在此后的一段时间内启动(如果您安排在晚上8:22运行在晚上9点,这将是38分钟),然后它在晚上9点调用Lambda函数,然后删除CloudWatch预定事件。我的问题是,当创建CloudWatch Scheduled Event时,它会立即执行,然后以指定的时间间隔执行。

任何其他想法都会受到赞赏,因为我无法想到另一种解决方案。提前谢谢!

6 个答案:

答案 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上使用它,结果看起来像这样: enter image description here

注意:我没有指定星期几,因为我给了它固定的日期,这很明显。

答案 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