title: reading files triggered by s3 event
body: <p>Here is what i want to do :</p>
  
  <ol>
  <li>User uploads a csv file onto AWS S3 bucket.</li>
  <li>Upon file uploaded, S3 bucket invokes the lambda function that i have created.</li>
  <li>My lambda function reads csv file content, then send email  with the file content and info</li>
  </ol>
  
  <p><strong>Local environment</strong></p>
  
  <p>Serverless framework version 1.22.0</p>
  
  <p>Python 2.7</p>
  
  <p>Here is my serverless.yml file</p>
  
  <pre><code>service: aws-python # NOTE: update this with your service name
  
  provider:
    name: aws
    runtime: python2.7
    stage: dev
    region: us-east-1
    iamRoleStatements:
          - Effect: "Allow"
            Action:
                - s3:*
                - "ses:SendEmail"
                - "ses:SendRawEmail"
                - "s3:PutBucketNotification"
            Resource: "*"
  
  functions:
    csvfile:
      handler: handler.csvfile
      description: send mail whenever a csv file is uploaded on S3 
      events:
        - s3:
            bucket: mine2
            event: s3:ObjectCreated:*
            rules:
              - suffix: .csv
  </code></pre>
  
  <p>and here is my lambda function : </p>
  
  <pre><code>import json
  import boto3
  import botocore
  import logging
  import sys
  import traceback
  import csv
  
  from botocore.exceptions import ClientError
  from pprint import pprint
  from time import strftime, gmtime
  from json import dumps, loads, JSONEncoder, JSONDecoder
  
  
  #setup simple logging for INFO
  logger = logging.getLogger()
  logger.setLevel(logging.INFO)
  
  from botocore.exceptions import ClientError
  
  def csvfile(event, context):
      """Send email whenever a csvfile is uploaded to S3 """
      body = {}
      emailcontent = ''
      status_code = 200
      #set email information
      email_from = '****@*****.com'
      email_to = '****@****.com'
      email_subject = 'new file is uploaded'
      try:
          s3 = boto3.resource(u's3')
          s3 = boto3.client('s3')
          for record in event['Records']:
              filename = record['s3']['object']['key']
              filesize = record['s3']['object']['size']
              source = record['requestParameters']['sourceIPAddress']
              eventTime = record['eventTime']
          # get a handle on the bucket that holds your file
          bucket = s3.Bucket(u'mine2')
          # get a handle on the object you want (i.e. your file)
          obj = bucket.Object(key= event[u'Records'][0][u's3'][u'object'][u'key'])
          # get the object
          response = obj.get()
          # read the contents of the file and split it into a list of lines
          lines = response[u'Body'].read().split()
          # now iterate over those lines
          for row in csv.DictReader(lines):    
              print(row)
              emailcontent = emailcontent + '\n' + row 
      except Exception as e:
          print(traceback.format_exc())
          status_code = 500
          body["message"] = json.dumps(e)
  
      email_body = "File Name: " + filename + "\n" + "File Size: " + str(filesize) + "\n" +  "Upload Time: " + eventTime + "\n" + "User Details: " + source + "\n" + "content of the csv file :" + emailcontent
      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')
  </code></pre>
  
  <p>i don't know what i did wrong, cause the part when i just get info about the file works fine, it's when i add the reading part that the lambda function doesn't return anything</p>