in assets/lambda/code/scan/lambda.py [0:0]
def lambda_handler(event, context):
logger.info(json.dumps(event))
bucket_info = event["Records"][0]["s3"]
input_bucket = bucket_info["bucket"]["name"]
input_key = unquote_plus(bucket_info["object"]["key"])
summary = ""
if not input_key.endswith("/"):
mount_path = os.environ["EFS_MOUNT_PATH"]
definitions_path = f"{mount_path}/{os.environ['EFS_DEF_PATH']}"
payload_path = f"{mount_path}/{context.aws_request_id}"
tmp_path = f"{payload_path}-tmp"
set_status(input_bucket, input_key, INPROGRESS)
create_dir(input_bucket, input_key, payload_path)
create_dir(input_bucket, input_key, tmp_path)
download_object(input_bucket, input_key, payload_path)
expand_if_large_archive(
input_bucket,
input_key,
payload_path,
bucket_info["object"]["size"],
)
create_dir(input_bucket, input_key, definitions_path)
freshclam_update(
input_bucket, input_key, payload_path, definitions_path
)
summary = scan(
input_bucket, input_key, payload_path, definitions_path, tmp_path
)
delete(payload_path)
delete(tmp_path)
else:
summary = {
"source": "serverless-clamscan",
"input_bucket": input_bucket,
"input_key": input_key,
"status": SKIP,
"message": "S3 Event trigger was for a non-file object",
}
logger.info(summary)
return summary