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);
}
});
});
}
});
};