in cosmos-db-migration-utility/src/lambda/batch-request-reader/lambda_function.py [0:0]
def lambda_handler(event, context):
logger.info("Lambda: batch-request-reader was invoked with event: %s.", event)
try:
data = {}
payload = {}
first_one = True
for record in event['Records']:
payload = record["body"]
request = json.loads(payload)
# TODO: in some weird case scenarios I am receiving a string even after loading
if type(request) == str:
request = json.loads(request)
logger.info("Completed loading payload information from message: %s.", json.dumps(request))
if first_one:
data = process_request(request)
first_one = False
else:
# process only one. send the payload back to the queue again
logger.info("Found more than one message in the request. Resending it back to queue. Request: %s.", json.dumps(request))
send_sqs_message("read-batch-request-queue", request, randint(0,5))
logging.info("Successfully completed processing batch-request-reader sqs messages. Result: %s.", json.dumps(data))
return data
except Exception as e:
stack_trace = traceback.format_stack()
data = {
"status": "error",
"input": payload,
"output": {
"operation": "batch-request-reader",
"error": str(e),
"stack_trace": stack_trace
}
}
logging.error("Failed while processing batch-request-reader messages. Result: %s.", json.dumps(data))
raise