我希望创建一个lambda,它将不断监视我在s3桶中的目录,并将通知对象是否在上传后驻留在桶中超过1小时。我们已经有了一个lambda来存档处理后的对象,它是基于s3事件调用的。但是我需要一个函数来计算对象的时间并通知。
我试过这样做。不帮助。
import boto3
import datetime
s3=boto3.resource('s3')
my_bucket=s3.Bucket('mybucketname')
def obj_age(s3):
modified=s3.ObjectSummary('last_modified')
return modified
modified=obj_age(s3)
if len(obj_age)==modified-datetime.timedelta(hours=1):
return ["nFound %i files more than %s hours old in %s." % (len(old_age), 1, bucket.name))]
要监视您的bucket,您可以:
- 创建一个AWS Lambda函数它列出bucket的内容,查找任何超过一个小时的对象,并向Amazon SNS Topic发送消息。
- 订阅SNS主题,当消息发送到该主题时接收电子邮件
- 创建Amazon CloudWatch事件规则每小时触发一次Lambda函数
下面是一个示例Lambda函数,它将检查任何超过一小时的对象,并为任何发现发送消息到Amazon SNS Topic:
import boto3
from datetime import datetime, timedelta
from dateutil.tz import tzutc, UTC
BUCKET = 'my-bucket'
TOPIC_ARN = 'arn:aws:sns:ap-southeast-2:123456789012:Old-File-Warning'
s3_resource = boto3.resource('s3')
sns_resource = boto3.resource('sns')
sns_topic = sns_resource.Topic(TOPIC_ARN)
for object in s3_resource.Bucket(BUCKET).objects.all():
if object.last_modified < datetime.now(tzutc()) - timedelta(hours = 1):
message = f"Object {object.key} is more than 1 hour old!"
sns_topic.publish(Message=message)
当然,你应该调查你的初始Lambda函数失败的原因,这将比编写和维护这个'check'函数简单得多。