UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

62 lines (61 loc) 3.17 kB
"use strict"; 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;