AWS Lambda Nodejs:从 S3 存储桶中获取过去 24 小时内创建的所有对象

AWS Lambda Nodejs: Get all objects created in the last 24hours from a S3 bucket

我有一个要求,我需要将我存储桶中的所有 JSON 文件转换为一个新行分隔 JSON 以供第 3 方使用。但是,我需要确保每个新创建的新分隔 JSON 只包含最近 24 小时内收到的文件,以避免一遍又一遍地选择相同的文件。这可以在 s3.getObject(getParams, function(err, data) 函数中完成吗?感谢任何关于不同方法的建议

谢谢

您可以尝试 S3 ListObjects 操作并通过 LastModified 元数据字段过滤结果。对于新对象,LastModified 属性将包含文件创建时间的信息,但对于更改的文件 - 最后修改时间。

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjectsV2-property

还有一种更复杂的方法,使用 Amazon Athena 和 AWS Glue 服务,但这需要修改您的 S3 对象键以拆分为分区,其中分区将是日期时间的键。 例如:

  • s3://bucket/reports/date=2019-08-28/report1.json
  • s3://bucket/reports/date=2019-08-28/report2.json
  • s3://bucket/reports/date=2019-08-28/report3.json
  • s3://bucket/reports/date=2019-08-29/report1.json

此方法可以通过两种方式实现,具体取决于您的文件架构。如果所有 JSON 文件都具有相同的 format/properties/schema,那么您可以创建 Glue Table,添加根报告路径作为此 table 的源,添加日期分区值 (2019-08-28) 并将 Amazon Athena 查询数据与常规 SELECT * FROM 报告 WHERE date='2019-08-28' 一起使用。如果没有,则创建一个带有 JSON 分类器的 Glue 爬虫,它将填充您的 tables,然后使用相同的 Athena - 将这些数据查询到合并的 JSON 文件

https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-samples-legislators.html