【问题标题】:I want to check files which are uploaded today in s3 and check if the files are more than 1 hour我想检查今天在 s3 中上传的文件并检查文件是否超过 1 小时
【发布时间】:2021-12-22 05:30:57
【问题描述】:

我想创建一个 lambda,每隔一小时监控一个 s3 存储桶。 lambda 的条件应该是这样的:

如果今天上传了文件,则 lambda 应该获取对象列表并检查 lastmodified 是否距离现在超过 1 小时。

如果今天没有文件上传,lambda 应该什么都不做。 我尝试了下面的代码,但它给了我所有旧文件。我不希望 lambda 检查昨天或之前上传的文件。它应该只检查今天上传的那些文件,并告诉我这些文件是否早于现在 1 小时。

我不想要 s3 事件通知。

请帮助我如何实现这一目标

import boto3
import os 
from datetime import datetime, timedelta, timezone
from dateutil.tz import tzutc, UTC

TOPIC_ARN = 'mysnstopicarn'

s3_resource = boto3.client('s3')
sns_resource = boto3.resource('sns')
sns_topic = sns_resource.Topic(TOPIC_ARN)

lessthan = []
greaterthan = []
result = []

listobjects = s3_resource.list_objects(Bucket='mybucketname',Delimiter='Archives')['Contents']

def lambda_handler(event, context):

    for key in listobjects:
 
        if key['LastModified'] < datetime.now(timezone.utc) - timedelta(hours=1):
    
          lessthan.append(key['Key'])

    for i in lessthan:
      path, filename = os.path.split(i)
      result.append(filename)
    final = list(filter(None, result))

    sns_topic.publish(Message=f"This object {final} is more than one hour old")

【问题讨论】:

    标签: python python-3.x amazon-s3 aws-lambda boto3


    【解决方案1】:

    您正在寻找最新的文件,因此您应该寻找LastModified大于您的目标日期。

    # if LastModified is greater than (not less than) the target
    if key['LastModified'] > datetime.now(timezone.utc) - timedelta(hours=1):
    

    【讨论】:

    • ```if key['LastModified'] > datetime.now(timezone.utc) - timedelta(hours=1):
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2014-11-14
    • 2021-08-14
    • 2011-08-12
    相关资源
    最近更新 更多