#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):