【问题标题】:AWS service to track entity in dynamoDB用于跟踪 dynamoDB 中的实体的 AWS 服务
【发布时间】:2020-09-11 08:12:58
【问题描述】:

我正在 AWS 中构建一个简单的应用程序,让用户可以在有限的时间内租用汽车。我使用 AWS Lambda 进行计算,使用 dynamoDB 进行存储,使用 API Gateway 处理对 lambda 函数的请求。 我的问题是,是否有任何 AWS 服务或 dynamoDB 功能允许我跟踪 dynamoDB 中“汽车”对象的时间,这样当租用时间结束时,它会触发 lambda 函数来通知用户并执行其他操作?

【问题讨论】:

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


    【解决方案1】:

    您可以考虑将DynamoDB Time to LiveDynamoDB streams 和一个lambda 函数一起使用。

    在这种情况下,特定于租赁时间的项目将被放置在一个单独的表格中。他们会将 TTL 值设置为租赁时间。 DynamoDB 自动扫描并根据 TTL 删除项目。 DynamoDB 流可以拾取这些自动删除并转发到 lambda 函数。该函数将根据过期时间采取行动。

    但是,possible issue 可能是有时 DynamoDB 需要 48 小时才能删除一个项目。

    【讨论】:

    • 如果我理解正确的话,只要TTL一结束就调用lambda函数就没有问题了?或者这也需要时间?
    • @JakeHemmington Lambda 在删除过期项目时调用,而不是在 TTL 过期时调用。我不知道如此大的延迟多久发生一次,但这是有可能的。
    • 很酷的解决方案。为什么要将租赁的特定项目存储在单独的表中?
    • @SethGeoghegan DynamoDB 在 TTL 到期时删除项目。将它们保存在单独的表中可能会更安全,以避免删除包含所有客户信息的主要项目。此外,如果第二个表比主表更小更轻,大 TTL 删除延迟的风险可能会更短。
    【解决方案2】:

    DynamoDB 流和 TTL 不是很好的解决方案,因为 DynamoDB 不为 TTL 删除提供 SLA(在极少数情况下甚至可能需要超过 48 小时),并且该项目将被删除,因此以后不能被下游应用程序或分析使用。

    为此,您应该使用 Cloudwatch 事件规则(或 Amazon Eventbridge)和 cron 计划表达式。因此,您将项目放入 DynamoDB 表的代码随后可以使用 cron 计划表达式为未来租赁时间到期的时间创建 Cloudwatch 事件规则。这将触发一个 lambda,它可以调用您的通知服务来通知客户。

    【讨论】:

      【解决方案3】:

      一个可能的解决方案是让 Lambda cron 作业在计时器上运行,该计时器扫描或查询 DynamoDB 表以查找日期与租赁结束日期匹配的值。然后,此 lambda 可以使用 AWS Step Functions 调用您的 NotifyUser lambda,或者可以向您的 lambda 订阅的 SNS 主题发出事件。

      一些可能有用的链接:
      CronJob
      SNS

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-06
        • 2020-09-27
        • 2023-03-05
        相关资源
        最近更新 更多