UNPKG

@cloud-carbon-footprint/aws

Version:

The core logic to get cloud usage data and estimate energy and carbon emissions from Amazon Web Services.

83 lines (78 loc) 2.94 kB
/* * © 2021 Thoughtworks, Inc. */ import { ReplicationFactorsForService } from '@cloud-carbon-footprint/core' import { containsAny } from '@cloud-carbon-footprint/common' import { AWS_CLOUD_CONSTANTS } from '../domain' const { REPLICATION_FACTORS } = AWS_CLOUD_CONSTANTS enum SERVICES { S3 = 'AmazonS3', EC2 = 'AmazonEC2', EFS = 'AmazonEFS', RDS = 'AmazonRDS', DOC_DB = 'AmazonDocDB', DYNAMO_DB = 'AmazonDynamoDB', ECR = 'AmazonECR', ELASTICACHE = 'AmazonElastiCache', SIMPLE_DB = 'AmazonSimpleDB', } export const AWS_REPLICATION_FACTORS_FOR_SERVICES: ReplicationFactorsForService = { [SERVICES.S3]: (usageType: string): number => { if ( containsAny( ['TimedStorage-ZIA', 'EarlyDelete-ZIA', 'TimedStorage-RRS'], usageType, ) ) return REPLICATION_FACTORS.S3_ONE_ZONE_REDUCED_REDUNDANCY // 2 if (containsAny(['TimedStorage', 'EarlyDelete'], usageType)) return REPLICATION_FACTORS.S3 // 3 return REPLICATION_FACTORS.DEFAULT // 1 }, [SERVICES.EC2]: (usageType: string): number => { if (usageType.includes('VolumeUsage')) return REPLICATION_FACTORS.EC2_EBS_VOLUME // 2 if (usageType.includes('SnapshotUsage')) return REPLICATION_FACTORS.EC2_EBS_SNAPSHOT // 3 return REPLICATION_FACTORS.DEFAULT }, [SERVICES.EFS]: (usageType: string): number => { if (usageType.includes('ZIA')) return REPLICATION_FACTORS.EFS_ONE_ZONE // 2 return REPLICATION_FACTORS.EFS // 3 }, [SERVICES.RDS]: (usageType: string): number => { if (usageType.includes('BackupUsage')) return REPLICATION_FACTORS.RDS_BACKUP // 3 if (usageType.includes('Aurora')) return REPLICATION_FACTORS.RDS_AURORA // 6 if (usageType.includes('Multi-AZ')) return REPLICATION_FACTORS.RDS_MULTI_AZ // 2 return REPLICATION_FACTORS.DEFAULT }, [SERVICES.DOC_DB]: (usageType: string): number => { if (usageType.includes('BackupUsage')) return REPLICATION_FACTORS.DOCUMENT_DB_BACKUP // 3 return REPLICATION_FACTORS.DOCUMENT_DB_STORAGE // 2 }, [SERVICES.DYNAMO_DB]: (): number => { return REPLICATION_FACTORS.DYNAMO_DB // 2 }, [SERVICES.ECR]: (usageType: string): number => { if (usageType.includes('TimedStorage')) return REPLICATION_FACTORS.ECR_STORAGE // 3 return REPLICATION_FACTORS.DEFAULT }, [SERVICES.ELASTICACHE]: (usageType: string): number => { if (usageType.includes('BackupUsage')) return REPLICATION_FACTORS.DOCUMENT_ELASTICACHE_BACKUP // 3 return REPLICATION_FACTORS.DEFAULT }, [SERVICES.SIMPLE_DB]: (usageType: string): number => { if (usageType.includes('TimedStorage')) return REPLICATION_FACTORS.SIMPLE_DB // 2 return REPLICATION_FACTORS.DEFAULT }, DEFAULT: (): number => { return REPLICATION_FACTORS.DEFAULT // 1 }, }