from aws_lambda_powertools.logging.logger import Logger from datetime import datetime import time import os import boto3 import random import json logger = Logger() s3 = boto3.resource('s3') _max_allowed_files=5000 _incorrect_factor = 0.20 def handler(event, context): logger.debug({ "event": event }) bucket = os.getenv("DESTINATION_BUCKET") numberOfFiles = event["detail"]['numberOfFiles'] if numberOfFiles > _max_allowed_files: logger.warning({ "message": "User requested {} files, but API allows only {} at this point. Will proceed with {} requests".format(numberOfFiles, _max_allowed_files, _max_allowed_files) }) numberOfFiles = _max_allowed_files logger.info({ "message": "Starting to generate {} files on bucket{}".format(numberOfFiles, bucket) }) generateFiles(bucket, numberOfFiles) logger.info({ "message": "Finished to generate files" }) return { "statusCode": 200, "body": json.dumps({"message": "Generated {} files correctly AND {} with incorrect format".format(numberOfFiles, round(numberOfFiles*_incorrect_factor))}), "headers": { "Content-Type": "application/json" } } def generateFiles(bucket, numberOfFiles): xmlTemplate = """ 2 N {} 11 2021-07-23T21:14:00-03:00 76500680000174 012345678901234 1.970942 6.680008 E {} 3 120 cXVhZXF1YWVxdWFlcXVhZQ== 95 120 3 """ #Generating WELL-FORMED files for x in range(numberOfFiles): logger.debug({ "message": "Generating file {} out of {}".format(x, numberOfFiles) }) isValid = bool(random.getrandbits(1)) placa = "AWS2022" if isValid else "AWS20222" timeNow = datetime.now() xmlBody = xmlTemplate.format(timeNow, placa).encode("utf-8") key = "nf-{}.xml".format(time.time()) s3.Bucket(bucket).put_object(Key=key, Body=xmlBody) #Generating BAD-FORMED files(20%) numberOfIncorrectFiles = round(numberOfFiles * _incorrect_factor) for x in range(numberOfIncorrectFiles): logger.debug({ "message": "Generating bad-formated file {} out of {}".format(x, numberOfIncorrectFiles) }) placa = "AWS2022" timeNow = datetime.now() xmlBody = xmlTemplate.format(timeNow, placa).replace("", "").encode("utf-8") key = "invalid-nf-{}.xml".format(time.time()) s3.Bucket(bucket).put_object(Key=key, Body=xmlBody)