Мне нужно создать инструмент мониторинга, который проверяет сегменты (по 1000+ файлов в каждом) на наличие новых объектов, созданных за последние два часа, и, если объекты не были созданы, отправляет сообщение.Моей первой идеей было создать лямбда-функцию, которая будет запускаться каждые 20 минут.Итак, я создал код python3 + boto3:
import boto3
from datetime import datetime,timedelta
import pytz
import sys
s3 = boto3.resource('s3')
sns = boto3.client('sns')
buckets = ['bucket1', 'bucket2', 'bucket3']
check_fail = []
def check_bucket(event, context):
time_now_UTC = datetime.utcnow().replace(tzinfo=pytz.UTC)
delta_hours = time_now_UTC - timedelta(hours=2)
for bucket_name in buckets:
bucket = s3.Bucket(bucket_name)
for key in bucket.objects.all():
if key.last_modified >= delta_hours:
print("There are new files in the bucket %s" %bucket)
break
else:
check_fail.append(bucket)
if len(check_fail) >= 1:
sns.publish(
TopicArn='arn:aws:sns:us-east-1:xxxxxxxxxxxxxx:xxxxxx',
Message="The following buckets didn't receive new files for longer than 2 hours: %s" %check_fail,
Subject='AWS Notification Message' )
else:
print("All buckets have new files")
Этот подход не работает из-за большого количества объектов внутри каждого сегмента.Проверка по «key.last_modified» занимает слишком много времени.
У кого-нибудь есть идеи, как мне этого добиться?
Спасибо!