def lambda_handler()

in lambdas/index.py [0:0]


def lambda_handler(event, context):
    logger.info(event)
    project = event["detail"]["project-name"]
    status = event["detail"]["build-status"]
    env_vars = event["detail"]["additional-information"]["environment"]["environment-variables"]

    template_params = {
        "PROJECT": project,
        "STATUS": status,
    }

    template_params.update({i["name"]: i["value"] for i in env_vars})
    logger.info("Template params: %s", template_params)

    hooks = get_hooks_for_project(project)
    logger.info("Obtained %s hooks for project %s", len(hooks), project)
    for i in hooks:
        try:
            hook_url_param = i["hook_url_param_name"]
            statuses = i["statuses"]
            message = compile_template(template_params, i.get("template"))
            logger.info("Compiled template: %s", message)
            if status in statuses:
                logger.info("Invoking hook with SSM param '%s' for status '%s'", hook_url_param, status)
                hook_url = get_ssm_param(hook_url_param)
                headers = None
                header_param_name = i.get("hook_headers_param_name", None)
                if header_param_name:
                    headers = json.loads(get_ssm_param(header_param_name))
                invoke_webhook(hook_url, message, headers)
        except ClientError as e:
            logger.error(
                "Unable to retrieve webhook url from Parameter Store for item %s",
                hook_url_param)
            logger.error(str(e))
        except ValueError as e:
            logger.error(
                "Unable to post to webhook url from Parameter Store for item %s",
                hook_url_param)
            logger.error(str(e))
        except KeyError as e:
            logger.error("Invalid DDB item. Verify your template is valid.")
            logger.error(str(e))