0

Ich habe eine Lambda-Funktion erstellt, die E-Mails sendet, wenn eine Datei auf s3 Eimer hochgeladen wird, aber jetzt möchte ich alle Informationen zu dieser Datei als Name, Größe, Datum und haben Zeitpunkt des Uploads, und wenn es möglich ist, wo es herkommt. Ich habe all diese Informationen auf aws Konsole, aber ich möchte es in den E-Mail-Körper haben.Erhalten Sie Informationen über eine Datei hochgeladen S3

Ich benutze Serverless Framework. v 1.22.0

hier ist mein Code

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 

Antwort

4

Hier wird das Ereignis json Struktur von S3 gesendet bei Objekterstellung: http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

Sie können die Dateinamen erhalten, Größen und Quell-IP wie folgt aus:

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

vielen Dank, das war sehr hilfreich – 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 davon post.

+0

vielen Dank bro, die mein Problem lösen – ner

Verwandte Themen