0

我创建了一个lambda函数,当文件上传到s3存储桶时发送电子邮件,但是现在我想要将与该文件相关的所有信息作为名称,大小,日期和上传时间,以及它可能来自何处。 我在aws控制台上拥有所有这些infortmation,但希望将它放在电子邮件正文中。获取关于上传到S3的文件的信息

我正在使用无服务器框架。 v 1.22.0

这里是我的代码

import json 
import boto3 
import botocore 
import logging 
import sys 
import os 
import traceback 


from botocore.exceptions import ClientError 
from pprint import pprint 
from time import strftime, gmtime 

email_from = '********@*****.com' 
email_to = '********@*****.com' 
email_subject = 'new event on s3 ' 
email_body = 'a new file is uploaded' 


#setup simple logging for INFO 
logger = logging.getLogger() 
logger.setLevel(logging.INFO) 

from botocore.exceptions import ClientError 

def sthree(event, context): 
"""Send email whenever a file is uploaded to S3""" 
body = {} 
status_code = 200 
email_body = str(context) 

try: 
    s3 = boto3.client('s3') 
    ses = boto3.client('ses') 
    ses.send_email(Source = email_from, 
       Destination = {'ToAddresses': [email_to,],}, 
        Message = {'Subject': {'Data': email_subject}, 'Body':{'Text' : {'Data': email_body}}} 
     ) 
except Exception as e: 
    print(traceback.format_exc()) 
    status_code = 500 
    body["message"] = json.dumps(e) 

response = { 
    "statusCode": 200, 
    "body": json.dumps(body) 
} 

return response 

回答

4

下面是在对象创建时由S3发送事件JSON结构: http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

您可以获取文件名,大小和源IP像这样:

for record in event['Records']: 
    filename = record['s3']['object']['key']; 
    filesize = record['s3']['object']['size']; 
    source = record['requestParameters']['sourceIPAddress']; 
    eventTime = record['eventTime']; 
+0

非常感谢你,这是非常有帮助 – ner

3
def lambda_handler(event, context): 
    s3 = boto3.client('s3') 
    email_from = '[email protected]' 
    email_to = '[email protected]' 
    email_subject = 'new event on s3' 
    email_body = "File Name :" + event[u'Records'][0][u's3'][u'object'][u'key'] + "\n" + "File Size :" + str(event[u'Records'][0][u's3'][u'object'][u'size']) + "\n" + "Upload Time :" + event[u'Records'][0][u'eventTime'] + "\n" + "User Details :" + event[u'Records'][0][u'userIdentity'][u'principalId'] 
    ses = boto3.client('ses') 
    ses.send_email(Source = email_from, 
       Destination = {'ToAddresses': [email_to,],}, 
        Message = {'Subject': {'Data': email_subject}, 'Body':{'Text' : {'Data': email_body}}} 
     ) 
    print("Function execution Completed !!!") 

˚F从这post

+0

非常感谢你的兄弟,解决我的问题 – ner