import json import boto3 import zipfile import os from io import BytesIO def lambda_handler(event, context): # TODO implement s3_resource = boto3.resource('s3') bucket = os.environ['BUCKET'] aws_access_key = os.environ['AWS_ACCESS_KEY_ID_2'] aws_secret_key = os.environ['AWS_SECRET_ACCESS_KEY_2'] source_key = event['Records'][0]['s3']['object']['key'] recipient_email = os.environ['RECIPIENT_EMAIL'] sender_email = os.environ['SENDER_EMAIL'] folder_processed = "processed/" try: zip_obj = s3_resource.Object(bucket_name=bucket, key=source_key) buffer = BytesIO(zip_obj.get()["Body"].read()) z = zipfile.ZipFile(buffer) for filename in z.namelist(): file_info = z.getinfo(filename) file_name = os.path.basename(filename) if filename.lower().endswith(('.jpg', '.jpeg')): s3_resource.meta.client.upload_fileobj( z.open(filename), Bucket=bucket, Key=f'{folder_processed}{file_name}' ) return { 'statusCode': 200, 'body': json.dumps('Successfully Extracted the Files and Processed them.') } except Exception as e: print(f"Error processing file {source_key}: {e}") # Send error email ses.send_email( Source=sender_email, Destination={'ToAddresses': [recipient_email]}, Message={ 'Subject': {'Data': 'Lambda Function Error Extract_CertiLock_Upload_Production'}, 'Body': { 'Text': { 'Data': f"Error processing file {source_key}: {str(e)}" } } } ) return { 'statusCode': 500, 'body': f"Error processing file {source_key}." }