【问题标题】:push logs in S3 to dynamoDB continuously将 S3 中的日志连续推送到 dynamoDB
【发布时间】:2018-05-23 06:10:24
【问题描述】:

我们通过 Kinesis Firehose 将应用程序日志发送到 S3。我们希望这些数据也流向 DynamoDB,以便我们可以有效地查询要在 Web UI(Ember 应用程序)中呈现的数据。这样做是为了让用户能够对数据进行过滤和排序等。基本上是为了支持通过 Web UI 进行查询的能力。

我查看了 AWS 数据管道。这是可靠的,但更适合一次性导入或预定导入。我们希望从 s3 到 dynamoDB 的数据流是连续的。

还有哪些其他选择可以实现这一目标?将数据从 S3 移动到 dynamoDB 并不是一个非常独特的要求。那你是怎么解决这个问题的?

S3 事件触发 lambda 是一个选项吗?如果是,那么如何让这个 lambda 容错?

【问题讨论】:

  • 您尝试过 AWS Athena 吗?它允许您对 S3 数据执行类似 SQL 的查询。
  • @dashmug 是的。这是我们的第一选择。我们在 s3 中对数据进行了分区,并在其上使用了 Athena。使用 Athena 的成功(在规模、成本方面)取决于分区策略。在我们的用例中,我们估计会达到分区的限制,因此不可行/不划算。

标签: amazon-s3 aws-lambda amazon-dynamodb amazon-kinesis-firehose


【解决方案1】:

全文查询

您可以按如下方式设计您的解决方案,以便使用 AWS Elasticsearch 作为富查询的目标进行更好的查询。

  • 将 Kinesis Firehouse 目标设置到 Amazon Elastic Search。这将允许您从 Web UI 进行全文查询。
  • 您可以选择仅备份失败的记录或所有记录。如果您选择所有记录,Kinesis Firehose 会将所有传入源数据备份到您的 S3 存储桶,同时将数据传输到 Amazon Elasticsearch

基本查询

如果您打算使用 DynamoDB 存储日志的元数据,最好将 S3 触发器配置为 Lambda,它会检索文件并将元数据更新到 DynamoDB。

【讨论】:

  • 谢谢。这看起来很有希望。但这不是很昂贵,因为它需要每个域都有自己的集群吗?您如何使用 dynamoDB 方法衡量这一点?
【解决方案2】:

S3 事件触发 lambda 是一个选项吗?

这绝对是一个选择。您可以在您的 S3 存储桶上创建一个 PutObject event 并让它调用您的 Lambda 函数,该函数将异步调用它

如果是,那么如何让这个 lambda 容错?

默认情况下,异步调用将retry twice upon failure。为确保两次重试后的容错,您可以使用Dead Letter Queues 并将失败的事件发送到 SQS 队列或 SNS 主题以供稍后处理。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 2020-11-23
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2016-01-12
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多