in source/aws_lambda/s3_event/handler.py [0:0]
def lambda_handler(event, context):
"""Handles an S3 Event Notification (for any .json file written to any subfolder in "train/"
:param dict event: AWS Lambda Event (in this case, an S3 Event message)
:param context:
:return: None
"""
event: S3Event = S3Event(event)
bucket = event.bucket_name
s3 = get_service_client("s3")
for record in event.records:
key = record.s3.get_object.key
logger.info(
f"processing Amazon S3 event notification record for s3://{bucket}/{key}"
)
metrics.add_metric("ConfigurationsProcessed", unit=MetricUnit.Count, value=1)
s3_config = s3.get_object(Bucket=bucket, Key=key)
config_text = s3_config.get("Body").read().decode("utf-8")
# create the configuration, check for errors
configuration = Configuration()
configuration.load(config_text)
if configuration.errors:
send_configuration_error(configuration)
metrics.add_metric(
"ConfigurationsProcessedFailures", unit=MetricUnit.Count, value=1
)
return
# configuration has loaded, validate it
configuration.validate()
if configuration.errors:
metrics.add_metric(
"ConfigurationsProcessedFailures", unit=MetricUnit.Count, value=1
)
send_configuration_error(configuration)
else:
config = configuration.config_dict
config = set_bucket(config, bucket, key)
metrics.add_metric(
"ConfigurationsProcessedSuccesses", unit=MetricUnit.Count, value=1
)
start_execution(config)