我有一个相机,每小时向我的AWS S3存储桶添加新文件,除非它不这样做。为了快速排除故障,我希望能够在S3文件夹中找到(列出或查看)最新的文件。或者列出自特定日期/时间以来的所有文件。顺便说一下,文件名是由UNIX纪元日期戳组成的,所以我可以查找包含比161315000大的数字的文件名。
到目前为止,我唯一的解决方案是制作所有文件的清单,通过管道传输到一个文本文件,然后我可以解析它。这花的时间太长了……我有成千上万的文件。我很乐意使用AWS CLI, s3cmd, Boto…无论工作。
与其使用文件名("Key"),还不如使用LastModified
日期S3在创建对象时自动附加的。
列出最近的对象根据这个日期,您可以使用:
aws s3api list-objects --bucket my-bucket --query 'sort_by(Contents, &LastModified)[-1].Key' --output text
列出给定日期以来的对象(在UTC时区,我怀疑):
aws s3api list-objects --bucket my-bucket --query "Contents[?LastModified>='2021-01-29'].[Key]" --output text
如果你希望通过Python来做,你将需要检索一个ALL对象的列表,然后你可以解析对象键或LastModified日期。
这是单独使用S3无法做到的,因为S3不是文件系统,而是对象存储。因此,它针对大量对象进行了优化,而不是快速列出。
如果您可以控制对象键的格式,则可以使用当前日期作为前缀(如2021/02/11/161315000
)。如果您只是为了调试而手动查找最新对象,那么这将使查找最新对象变得容易。
如果不能更改对象键的格式,则必须使用更复杂的选项。
虽然存在S3库存报告,它确实提供了所有对象及其最后修改时间的列表,但这可能也不适合您,因为这些报告每天只生成一次,可能不包括最近添加的对象。
另一种可能更适合您的用例的方法是,为新创建的对象使用S3事件通知来触发AWS Lambda函数。然后,这个AWS Lambda函数可以将最后修改对象的S3键存储在某个地方(比如将其记录到Amazon CloudWatch,在那里您可以简单地检查最近创建的S3对象的最新日志记录)。