0

J'ai créé une fonction lambda qui envoie des emails quand un fichier est téléchargé sur s3 seau, mais maintenant je veux avoir toutes les informations liées à ce fichier comme le nom, la taille, la date et temps de téléchargement, et si c'est possible d'où il vient. J'ai tout cet infortmation sur console aws, mais je veux l'avoir dans le corps de l'e-mail.Obtenir des informations sur un fichier téléchargé sur S3

J'utilise le framework sans serveur. v 1.22.0

ici est mon 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 

Répondre

4

Voici la structure JSON de l'événement envoyé par S3 lors de la création d'objets: http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

Vous pouvez obtenir les noms de fichiers, tailles et source ip comme ceci:

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

merci beaucoup, cela a été très utile – 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 à partir de ce post.

+0

merci beaucoup bro, cela résoudre mon problème – ner