exports.lambda_handler = function()

in rdk/template/runtime/nodejs4.3/rule_code.js [109:183]


exports.lambda_handler = function(event, context, callback) {
    checkDefined(event, 'event');
    const invokingEvent = JSON.parse(event.invokingEvent);
    const ruleParameters = JSON.parse(event.ruleParameters);
    getConfigurationItem(invokingEvent, (err, configurationItem) => {
        if (err) {
            callback(err);
        }
        //let compliance = 'NOT_APPLICABLE';
        if (isApplicable(configurationItem, event)) {
            invokingEvent.configurationItem = configurationItem;
            event.invokingEvent = JSON.stringify(invokingEvent);
            rule_handler(event, context, (err, compliance_results) => {
                if (err) {
                    callback(err);
                }
                //compliance = computedCompliance;
                var putEvaluationsRequest = {};

                // Put together the request that reports the evaluation status
                if (typeof compliance_results === 'string' || compliance_results instanceof String){
                  putEvaluationsRequest.Evaluations = [
                      {
                          ComplianceResourceType: configurationItem.resourceType,
                          ComplianceResourceId: configurationItem.resourceId,
                          ComplianceType: compliance_results,
                          OrderingTimestamp: configurationItem.configurationItemCaptureTime
                      }
                  ];
                } else if (compliance_results instanceof Array) {
                  putEvaluationsRequest.Evaluations = [];

                  var fields = ['ComplianceResourceType', 'ComplianceResourceId', 'ComplianceType', 'OrderingTimestamp'];

                  for (var i = 0; i < compliance_results.length; i++) {
                    var missing_fields = false;
                    for (var j = 0; j < fields.length; j++) {
                      if (!compliance_results[i].hasOwnProperty(fields[j])) {
                        console.info("Missing " + fields[j] + " from custom evaluation.");
                        missing_fields = true;
                      }
                    }

                    if (!missing_fields){
                      putEvaluationsRequest.Evaluations.push(compliance_results[i]);
                    }
                  }
                } else {
                  putEvaluationsRequest.Evaluations = [
                      {
                          ComplianceResourceType: configurationItem.resourceType,
                          ComplianceResourceId: configurationItem.resourceId,
                          ComplianceType: 'INSUFFICIENT_DATA',
                          OrderingTimestamp: configurationItem.configurationItemCaptureTime
                      }
                  ];
                }

                putEvaluationsRequest.ResultToken = event.resultToken;

                // Invoke the Config API to report the result of the evaluation
                config.putEvaluations(putEvaluationsRequest, (error, data) => {
                    if (error) {
                        callback(error, null);
                    } else if (data.FailedEvaluations.length > 0) {
                        // Ends the function execution if any evaluation results are not successfully reported.
                        callback(JSON.stringify(data), null);
                    } else {
                        callback(null, data);
                    }
                });
            });
        }
    });
};