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