问题描述
我有一个摄像头,它每小时向我的 AWS S3 存储桶添加新文件,除非它没有。为了快速排除故障,我希望能够在 S3 文件夹中找到(列表或查看)最新的文件。或者列出自特定日期/时间以来的所有文件。 FWIW,文件名由 UNIX 纪元日期戳组成,因此我可以查找包含大于 161315000 的数字的文件名。
到目前为止,我唯一的解决方案是列出所有文件,通过管道传输到文本文件,然后我可以对其进行解析。这需要太长时间...我有数万个文件。
我很乐意使用 AWS CLI、s3cmd、Boto...任何有用的东西。
解决方法
这是您无法单独使用 S3 做的事情,因为 S3 不是文件系统,而是对象存储。因此,它针对大量对象进行了优化,而不是针对快速列出。
如果您可以控制对象键的格式,您可以使用当前日期作为前缀(如 2021/02/11/161315000
)。如果您只是出于调试目的手动查找最新的对象,则可以轻松找到最新的对象。
如果无法更改对象键的格式,则必须求助于更复杂的选项。
虽然存在 S3 inventory 报告,它确实提供了所有对象及其上次修改时间的列表,但这可能也不适合您,因为这些报告每天仅生成一次并且可能不包括最近添加的对象。
另一种可能更适合您的用例的替代方法是将 S3 event notifications 用于新创建的对象以触发 AWS Lambda 函数。然后,此 AWS Lambda 函数可以将最后修改的对象的 S3 键存储在某处(例如将其记录到 Amazon CloudWatch,您可以在其中简单地检查最近创建的 S3 对象的最新日志记录)。
,您可以简单地使用创建对象时 S3 自动附加的 LastModified
日期,而不是使用文件名(“密钥”)。
要根据此日期列出最近的对象,您可以使用:
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 执行此操作,则需要检索所有对象的列表,然后您可以解析对象键或 LastModified 日期。