def lambda_handler()

in source/sfm-respond-to-inspector-assessment-complete.py [0:0]


def lambda_handler(event, context):

    logger.info('Event: {}'.format(json.dumps(event)))

    # First, get the Inspector assessment run ARN from the event.
    assessment_run_arn = json.loads(event['Records'][0]['Sns']['Message'])['run']

    # At the time this function was written, some Inspector APIs do not
    # support pagination, so the most number of results we can get at one
    # time is 500.

    # Get the agents (instances) that participated in the assessment. We'll loop
    # through them to retrieve the findings for each agent.
    logger.debug('assessment_run_arn: {}'.format(assessment_run_arn))
    logger.debug('maxResults: {}'.format(INSPECTOR_RESOURCE_LIMIT))

    assessment_run_agents = inspector_client.list_assessment_run_agents(
        assessmentRunArn = assessment_run_arn,
        maxResults = INSPECTOR_RESOURCE_LIMIT
    )['assessmentRunAgents']

    logger.info('got {} assessment run agents.'.format(len(assessment_run_agents)))
    # Send anonymous data
    if os.environ['send_anonymous_data'].lower() == 'yes':
        logger.info('Sending anonymous metrics')
        try:
            params = {'Solution': 'SO0043',
                'UUID': os.environ['uuid'],
                'Data': {'ManagedInstanceCount': len(assessment_run_agents)},
                'TimeStamp': str(datetime.utcnow().isoformat())
            }
            logger.debug('Anonymous data: {}'.format(json.dumps(params)))
            url = 'https://metrics.awssolutionsbuilder.com/generic'
            data = parse.urlencode(params).encode('ascii')
            headers = {'Content-Type':'application/json'}

            req = request.Request(url, data, headers)
            resp =  request.urlopen(req)
            logger.info('Anonymous Metrics Response Code: {}'.format(resp.getcode()))

        except Exception as e:
            logger.error("Exception sending anonymous metrics: {}".format(e))
    # End send anonymous data

    for assessment_run_agent in assessment_run_agents:

        logger.debug('topic arn: {}'.format(os.environ['assessment_agent_id_notification_topic_arn']))
        logger.debug('assessment run arn: {}'.format(assessment_run_arn))
        logger.debug('agent id: {}'.format(assessment_run_agent['agentId']))

        # Post to SNS topic. A Lambda function that listens for these notifications
        # will be executed for each agent in this loop.
        sns_client.publish(
            TopicArn = os.environ['assessment_agent_id_notification_topic_arn'],
            Message = json.dumps(
                {
                    "AssessmentRunArn": assessment_run_arn,
                    "AgentId": assessment_run_agent['agentId']
                }
            )
        )

    return