Я хочу проверить файлы, загруженные сегодня в s3, и проверить, находятся ли файлы более 1 часа

#python #python-3.x #amazon-s3 #aws-lambda #boto3

Вопрос:

Я хочу создать лямбду, которая будет отслеживать корзину s3 в течение каждого часа. условия для лямбды должны быть такими:

Если файлы загружены сегодня, lambda должна взять список объектов и проверить, не изменено ли последнее более чем через 1 час.

если сегодня файлы не загружены, 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'] lt; 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")  

Ответ №1:

Вы ищете самые последние файлы, поэтому вам следует искать LastModified значения, превышающие вашу целевую дату.

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

Комментарии:

1. «если ключ[‘LastModified’] gt; дата и время. сейчас(часовой пояс.utc) — timedelta(часы=1):