每天更新 S3 存储桶的最佳 AWS 方式?
Best AWS way to update S3 bucket daily?
这是当前架构:
- 用户数据保存到 DynamoDB
- 统计数据保存到 S3(25000 JSON 个对象,65KB/对象)
- 应用通过 DynamoDB 的 lambda 对用户进行身份验证
- app 从 API 网关端点读取统计信息,这会触发一个从 S3 读取的 lambda 和 return 它(每次一个 S3 对象)。
- 需要更新统计数据,我有一个被动更新逻辑。每次lambda从S3读取数据时,我都会检查MetaData,如果已经过时则覆盖现有的。
一切正常,但现在需求发生了变化。
- 我们需要每天对所有 25000 个对象进行一些分析。
- 分析必须在更新所有 25000 个 JSON 对象后完成
最好的 AWS 方法是什么?
我当时在想:
- 有一个预建列表,
- 然后每天使用 lambda 将所有更新命令推送到 SQS(由 EventBridge 触发),然后,
- 依次触发lambda处理器逐个更新S3对象。
- 当队列为空时,使用AWS Athena做分析,
- 将结果保存到 DynamoDB table,完成。
有什么更好的方法吗,使用lambda将25000条消息推送到SQS上是不是太过分了?会花很长时间吗?我将在 lambda 中处理重复消息,因此可以使用标准队列。
看来你问的是:
- 如何查询S3中的25,000个JSON文件,以及
- 如何在执行查询之前强制更新所有这些文件。
Amazon Athena 应该适合 #1。每次查询的费用约为 25,000 x 60Kb x /TB = [=10=].0075
。可以通过以压缩的 gzip 格式保存或使用 JSON 文件以外的其他格式来降低此成本。您可以测试对当前(过时的)文件的查询以确认它是否按预期工作。我建议在文件子集(例如 100 个文件)上对其进行测试,以确认它可以执行您想要的操作。
您对 25,000 个文件强制更新 的计划似乎不错,这可能涉及将 25,000 条消息推送到 Amazon SQS 队列,然后触发 AWS Lambda 函数。您可以编写函数来处理多条消息,批量大小最多为 10,或者将批量大小限制为 1,并在每次函数执行时处理一条消息。
所需时间 取决于处理每个 JSON 文件所需的时间,但 Lambda 函数可以 运行 并行(默认情况下最多 1000 个并发执行,但具有更高的突发能力,请参阅:AWS Lambda quotas)。我建议您首先在文件子集上对其进行测试(例如,从队列中的 10 条或 100 条消息开始)。
发送到 Amazon SQS 队列的消息数量没有限制。
这是当前架构:
- 用户数据保存到 DynamoDB
- 统计数据保存到 S3(25000 JSON 个对象,65KB/对象)
- 应用通过 DynamoDB 的 lambda 对用户进行身份验证
- app 从 API 网关端点读取统计信息,这会触发一个从 S3 读取的 lambda 和 return 它(每次一个 S3 对象)。
- 需要更新统计数据,我有一个被动更新逻辑。每次lambda从S3读取数据时,我都会检查MetaData,如果已经过时则覆盖现有的。
一切正常,但现在需求发生了变化。
- 我们需要每天对所有 25000 个对象进行一些分析。
- 分析必须在更新所有 25000 个 JSON 对象后完成
最好的 AWS 方法是什么?
我当时在想:
- 有一个预建列表,
- 然后每天使用 lambda 将所有更新命令推送到 SQS(由 EventBridge 触发),然后,
- 依次触发lambda处理器逐个更新S3对象。
- 当队列为空时,使用AWS Athena做分析,
- 将结果保存到 DynamoDB table,完成。
有什么更好的方法吗,使用lambda将25000条消息推送到SQS上是不是太过分了?会花很长时间吗?我将在 lambda 中处理重复消息,因此可以使用标准队列。
看来你问的是:
- 如何查询S3中的25,000个JSON文件,以及
- 如何在执行查询之前强制更新所有这些文件。
Amazon Athena 应该适合 #1。每次查询的费用约为 25,000 x 60Kb x /TB = [=10=].0075
。可以通过以压缩的 gzip 格式保存或使用 JSON 文件以外的其他格式来降低此成本。您可以测试对当前(过时的)文件的查询以确认它是否按预期工作。我建议在文件子集(例如 100 个文件)上对其进行测试,以确认它可以执行您想要的操作。
您对 25,000 个文件强制更新 的计划似乎不错,这可能涉及将 25,000 条消息推送到 Amazon SQS 队列,然后触发 AWS Lambda 函数。您可以编写函数来处理多条消息,批量大小最多为 10,或者将批量大小限制为 1,并在每次函数执行时处理一条消息。
所需时间 取决于处理每个 JSON 文件所需的时间,但 Lambda 函数可以 运行 并行(默认情况下最多 1000 个并发执行,但具有更高的突发能力,请参阅:AWS Lambda quotas)。我建议您首先在文件子集上对其进行测试(例如,从队列中的 10 条或 100 条消息开始)。
发送到 Amazon SQS 队列的消息数量没有限制。