cloud-report
Version:
Collects and analyzes cloud resources
62 lines (61 loc) • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const utils_1 = require("../../../utils");
const base_1 = require("../../base");
class InstanceWithoutElasticIPAnalyzer extends base_1.BaseAnalyzer {
analyze(params, fullReport) {
const allInstances = params.instances;
const allElasticIPs = params.elastic_ips;
if (!allInstances || !allElasticIPs) {
return undefined;
}
const instances_without_elastic_ip = { type: types_1.CheckAnalysisType.Reliability };
instances_without_elastic_ip.what = "Are there any EC2 instances without Elastic IP?";
instances_without_elastic_ip.why = `We should attach Elastic IP to EC2 instances
so that incase of instance failures we can easily
replace the instance without losing the associated public IP`;
instances_without_elastic_ip.recommendation = `Recommended to attach Elastic IP to EC2 instances which
you are accessing via SSH or web application without a load balancer`;
instances_without_elastic_ip.benchmark = ['all'];
const allRegionsAnalysis = {};
for (const region in allInstances) {
const regionInstances = allInstances[region];
const regionElasticIPs = allElasticIPs[region];
allRegionsAnalysis[region] = [];
for (const instance of regionInstances) {
const instanceAnalysis = {};
instanceAnalysis.resource = instance;
instanceAnalysis.resourceSummary = {
name: "Instance",
value: `${utils_1.ResourceUtil.getNameByTags(instance)} | ${instance.InstanceId}`,
};
if (this.isElasticIPAssociated(instance, regionElasticIPs)) {
instanceAnalysis.severity = types_1.SeverityStatus.Good;
instanceAnalysis.message = "Elastic IP is attached";
}
else {
instanceAnalysis.severity = types_1.SeverityStatus.Info;
instanceAnalysis.message = "Elastic IP is not attached";
instanceAnalysis.action = "Attach an Elastic IP";
}
allRegionsAnalysis[region].push(instanceAnalysis);
}
}
instances_without_elastic_ip.regions = allRegionsAnalysis;
return { instances_without_elastic_ip };
}
isElasticIPAssociated(instance, elasticIps) {
const publicENIs = instance.NetworkInterfaces.filter((networkInterface) => {
return networkInterface.Association && networkInterface.Association.PublicIp;
}).map((networkInterface) => {
return networkInterface.NetworkInterfaceId;
});
return elasticIps.map((elasticIp) => {
return elasticIp.NetworkInterfaceId;
}).some((networkInterfaceId) => {
return publicENIs.indexOf(networkInterfaceId) !== -1;
});
}
}
exports.InstanceWithoutElasticIPAnalyzer = InstanceWithoutElasticIPAnalyzer;