【问题标题】:Schedule cloudwatch and stop the scheduling in between安排 cloudwatch 并在其间停止安排
【发布时间】:2019-12-11 06:12:16
【问题描述】:

我每小时都有一个文件进入 s3。但是可能存在文件可能延迟的情况。收到文件后,我需要做一些功能。

为此,我将安排 cloudwatch 每隔 5 分钟检查一次 s3,以使用 lambda 函数检查文件。现在,一旦我收到文件, 我应该停止 cloudwatch 以在剩下的一小时内触发,并且仅在该小时完成后才启动下一个文件。

示例 - cloudwatch 在上午 12 点触发以查找文件,但未获取该文件。 5 分钟后,在 12:05 AM 再次触发,现在我们有了文件。因此,我们继续使用其余功能。 但是在这里,云手表应该停止到凌晨 1 点,并在凌晨 1 点重新启动以查找下一个文件。

有什么办法可以做到吗?

【问题讨论】:

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


    【解决方案1】:

    最好在文件到达时触发 AWS Lambda 函数。这可以通过创建一个 Amazon S3 事件作为 Lambda 函数的触发器来完成。

    这比每 x 分钟检查一次文件然后停用一段时间检查要简单得多。

    好处:

    • 更简单,更易于维护
    • 更快地响应文件到达

    【讨论】:

    • s3中的文件来得很频繁。我不能在 s3 中保留一个事件,因为它会产生问题。不管怎样,谢谢你的建议。
    • 它会产生什么样的“问题”?在问题中,您提到文件每小时来一次,这并不频繁。尽管如此,Amazon S3 Event + Lambda 组合每秒可以处理数百个文件,具体取决于文件所需的处理时间。
    【解决方案2】:

    您只需将 s3 添加为事件源。然后,每次将文件上传到 s3 时,您都会触发 lambda。 like this

    打开 lambda => 点击Add trigger,选择S3

    如果您仍想通过 CloudWatch 事件进行操作。您可以创建 2 个 lambda:

    • 第一个 lambda:根据需要每 5 分钟执行一次。 但在 lambda 结束时,您禁用 Cloudwatch 事件

    • 第二个 lambda:每小时运行一次。您运行此 lambda 以启用 Cloudwatch 事件,然后 Cloudwatch 事件将继续触发第一个 lambda。

    https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/events.html#CloudWatchEvents.Client.disable_rule

    【讨论】:

    • 是的,我知道这一点。但它可以通过云功能实现吗?使用我提到的方法。
    • 好的。那么,每次通过第二个 lambda 时,我都需要更新 cloudwatch 中的“下一个十触发器”功能?
    • 你是对的。简单的方法是使用 2 个 lambdas 和 2 个事件(每 5 分钟和每小时事件)。
    • 如何使用 lambda 来做到这一点?
    • 来自我发送的链接。您可以将 boto3 与 enable_ruledisable_rule 一起使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2010-11-27
    • 2019-05-20
    • 2021-11-26
    相关资源
    最近更新 更多