当前位置: 首页 > 知识库问答 >
问题:

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

单于经纬
2023-03-14

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

我知道CloudWatch提供计划的事件,我在想,当输入此提醒的计划时间时,将创建一个CloudWatch计划的事件,以便从现在起在该时间段内启动(就像如果您将其计划在晚上8:22运行到晚上9点,将是38分钟),然后它将在晚上9点调用Lambda函数,然后删除CloudWatch计划的事件。我的问题是,当创建CloudWatch计划事件时,它会立即执行,然后以指定的间隔执行。

任何其他的想法将不胜感激,因为我想不出其他的解决方案。提前感谢!

共有3个答案

朱修德
2023-03-14

您可以安排一个step函数,该函数可以在使用任意负载调用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()
郤立果
2023-03-14

您可以使用DynamoDBTTL功能轻松实现这一点,只需执行以下操作:

1-使用TTL放置项,即您要执行或调用lambda函数的确切时间。

2-配置DynamoDB流,以在项目的移除事件上触发lambda函数。

一旦项目/记录即将过期,您的lambda将被调用。您不必删除或清理任何内容,因为Dynamodb中的项目已经消失。

注意:但是这种方法很容易实现并且扩展得很好,但是有一个注意事项要提;使用DynamoDB TTL作为调度机制不能保证精确的时间精度,因为可能会有延迟。计划的任务会在几分钟后执行。

经慈
2023-03-14

可以使用以下语法计划lambda事件:

<代码>cron(分时、月日、月日、周日、年)

注意:所有字段都是必需的,时区仅为UTC

有关详细信息,请参阅AWS文档。

谢啦

 类似资料:
  • 问题内容: 例如我想在10.00.00.00 am调用js函数,我该怎么办? 我希望从此代码在00.30开始打开google,然后每隔1分钟就会再次打开它?该代码有什么问题? 问题答案: 您将需要setTimeout来设置计时器,并需要Date来计算计时器需要多长时间才能触发。

  • 我是胡克斯的新手,遇到了一些让我追自己尾巴的案例。 希望有人能解释或提供对我有意义的解决方案: > 下面这个线程:如何调用加载函数与反应使用效果只有一次 我试着在没有依赖性的情况下使用useEffect,eslint不喜欢这样,他们建议添加一个“跳过下一行”,这似乎有点骇人:

  • 问题内容: 我有这个简单的jquery代码。单击后,它会获得标签的URL,将页面加载到当前内容旁边,然后滑动并删除旧内容。页面的状态与以前完全相同,相同的元素没有额外的类或样式。问题在于下一个ajax调用不起作用。也许我需要.unbind()吗? 我是jquery和javascript的新手,所以我很迷路。非常感谢你的帮助 :) 问题答案: 由于您正在动态加载内容,因此替换事件处理程序的内容的可能

  • 当我把逻辑放在一个可运行的线程中时,它工作得很好,只是我不能与UI线程交互。所以我试图把所有的东西都放在一个类中,这个类扩展了Task,除了Task只执行一次之外,其他的都可以工作。没有错误,我从Task successed方法获得一条successed消息。 我还尝试在call方法中使task return Boolean为true,但这没有帮助。 请注意,此代码实际上存在于控制器中,但我将其放

  • 但是,我一定遗漏了什么,因为在构建项目时,我得到了一个关于OpenCL函数的未定义引用错误。这是完整的错误:任务“:App:ExternalNativeBuildArm8Debug”执行失败。 你知道我错过了什么吗?在过去的两天里,我搜索了几个小时关于如何在Android Studio中设置OpenCL的问题,但我找到的所有东西似乎都过时了,似乎对我的问题不起作用。

  • 问题内容: 该useEffect阵营钩将运行在功能上传递的每一个变化。可以对其进行优化,使其仅在所需属性更改时调用。 如果我想从中调用初始化函数而不在更改时再次调用该怎么办?假设我要加载一个实体,但是加载功能不需要组件中的任何数据。我们如何使用钩子做到这一点? 使用钩子可能看起来像这样: 问题答案: 如果只想在初始渲染后运行给定的函数,则可以给它一个空数组作为第二个参数。