UNPKG

@cloud-carbon-footprint/aws

Version:

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

312 lines (300 loc) 13.6 kB
/* * © 2021 Thoughtworks, Inc. */ import { QUERY_DATE_TYPES } from '@cloud-carbon-footprint/common' // This are the services we are over estimating to be SSD because we don't know what the underlying storage type is (SSD or HDD). export const SSD_SERVICES: string[] = [ 'AmazonDocDB', 'AmazonDynamoDB', 'AmazonEFS', 'AmazonES', 'AmazonSimpleDB', 'AmazonSageMaker', 'AWSIoTAnalytics', 'AmazonKinesisAnalytics', 'AmazonMQ', 'AmazonECS', 'AmazonLightsail', 'AmazonNeptune', 'AmazonFSx', 'AmazonKinesis', ] export const SSD_USAGE_TYPES: string[] = [ 'VolumeUsage.gp2', // EBS 'VolumeUsage.io2', // EBS 'VolumeUsage.io1', // EBS 'VolumeUsage.gp3', // EBS 'VolumeUsage.piops', // EBS 'GP2-Storage', // RDS 'PIOPS-Storage', // RDS 'Aurora:StorageUsage', // RDS Aurora Storage 'Kafka.Storage.GP2', // Kafka 'ES:Magnetic-Storage', // ElasticSearch Magnetic Storage 'TimedPITRStorage-ByteHrs', // DynamoDB Point-In-Time-Recovery 'ECS-EC2-GB-Hours', // ECS EC2 Storage 'Lambda-GB-Second', // Lambda GB-Seconds Storage 'Lambda-Edge-GB-Second', // Lambda Edge GB-Seconds Storage 'RDS:Multi-AZ-StorageUsage', // RDS Multi Availability Zone Storage 'Fargate-GB-Hours', //Fargate Storage 'dc2.large', // Redshift SSD 'dc2.8xlarge', // Redshift SSD 'ra3.xlplus', // Redshift SSD 'ra3.4xlarge', // Redshift SSD 'ra3.16xlarge', // Redshift SSD 'ra3.large', //Redshift SSD 'Storage.SSD.50', // Fsx 'Storage.MultiAZ:SSD', // Fsx 'RDS:GP3-Storage', // RDS 'Express.Storage', // Express 'TimedStorage-RabbitMQ-ByteHrs', // Amazon MQ for RabbitMQ (EBS, high-throughput messaging) 'Vectors-TimedStorage-ByteHrs', // S3 Vectors (AI Knowledge Bases, high-speed random access) 'Fargate-EphemeralStorage-GB-Hours', // Fargate ephemeral SSD storage 'Lambda-Storage-GB-Second', // Lambda /tmp ephemeral SSD storage 'Lambda-Storage-GB-Second-ARM', // Lambda /tmp ephemeral SSD storage (ARM) 'ES:GP3-Storage', // OpenSearch GP3 SSD storage 'RDS:Multi-AZ-GP3-Storage', // RDS Multi-AZ GP3 SSD storage 'RDS:PIOPS-Storage-IO2', // RDS Provisioned IOPS IO2 SSD 'RDS:Multi-AZ-PIOPS-Storage-IO2', // RDS Multi-AZ Provisioned IOPS IO2 SSD 'RDS:Multi-AZCluster-PIOPS-Storage-IO2', // RDS Cluster Provisioned IOPS IO2 SSD 'IO-OptimizedStorageUsage', // Aurora I/O-Optimized SSD storage 'RDS:Multi-AZCluster-GP3-Storage', // RDS Cluster GP3 SSD 'Storage.SSD.125', // FSx SSD 125GB 'Storage.SAZ_2N2:SSD', // FSx Single-AZ SSD 'Storage.SAZ_2N:SSD', // FSx Single-AZ SSD 'Storage.SAZ2:SSD', // FSx Single-AZ SSD 'Fargate-ARM-GB-Hours', // Fargate ARM container memory-hours ] export const HDD_USAGE_TYPES: string[] = [ 'VolumeUsage.st1', // EBS HDD Volume 'VolumeUsage.sc1', // EBS HDD Volume 'VolumeUsage', // EBS HDD Volume 'SnapshotUsage', // Snapshots in S3 'TimedStorage-ByteHrs', // Many different services 'RDS:StorageUsage', // RDS HDD Storage 'GlacierByteHrs', // Glacier 'Aurora:BackupUsage', // Aurora back up in S3 'RDS:ChargedBackupUsage', // RDS Backup in S3 'TimedStorage-RRS-ByteHrs', // S3 Reduced Redundancy Storage 'ElastiCache:BackupUsage', // ElastiCache backup in S3 'BackupUsage', // DocumentDB backup in S3 'Redshift:PaidSnapshots', // Redshift Snapshot in S3 'TimedStorage-SIA-ByteHrs', // S3 STANDARD_IA storage 'EarlyDelete-SIA', // S3 STANDARD_IA storage deleted before the minimum 30-day commitment ended 'TimedStorage-GlacierStaging', // Glacier Staging 'TimedStorage-SIA-SmObjects', // S3 STANDARD_IA storage (small) 'TimedStorage-GDA-ByteHrs', // S3 Glacier Deep Archive storage 'TimedStorage-GDA-Staging', // S3 Glacier Deep Archive storage 'TimedStorage-ZIA-ByteHrs', // S3 ONEZONE_IA storage 'TimedStorage-INT-FA-ByteHrs', // S3 frequent access tier of INTELLIGENT_TIERING Storage 'EarlyDelete-GDA', // S3 Glacier Deep Archive storage deleted before the minimum 180-day commitment ended 'ProcessedStorage-ByteHrs', // IoT Analytics Data Store in S3 'EarlyDelete-ZIA', // S3 ONEZONE_IA storage deleted before the minimum 30-day commitment ended 'EarlyDelete-ByteHrs', // S3 Glacier storage before the 90-day minimum commitment ended 'TimedStorage-ZIA-SmObjects', // S3 ONEZONE_`IA storage (small) 'TimedStorage-INT-IA-ByteHrs', // S3 infrequent access tier of INTELLIGENT_TIERING storage 'EarlyDelete-SIA-SmObjects', // S3 STANDARD_IA storage deleted before the minimum 30-day commitment ended (small) 'EarlyDelete-ZIA-SmObjects', // S3 ONEZONE_IA storage deleted before the minimum 30-day commitment ended (small) 'QS-Enterprise-SPICE', // Quicksight Enterprise SPICE 'TimedBackupStorage-ByteHrs', // DynamoDB Backup storage is S3 'DurableApplicationBackups', // Kinesis Backup Store in S3 'dc1.large', // Redshift HDD 'dc1.8xlarge', // Redshift HDD 'ds2.xlarge', // Redshift HDD 'ds2.8xlarge', // Redshift HDD 'EU-TimedStorage-GDA-Staging', // S3 Glacier 'BytesDeleted-STANDARD', // S3 STANDARD 'BytesDeleted-SIA', // S3 STANDARD_IA storage 'BytesDeleted-INT', // S3 Intelligent Tiering storage 'BytesDeleted-GDA', // S3 GLACIER DEEP ARCHIVE storage 'OverwriteBytes-Put-GLACIER', // S3 GLACIER storage 'OverwriteBytes-Put-RRS', // S3 Reduced Redundancy storage 'BackupUsage.MultiAZ', // Fsx 'ColdStorage-ByteHrs-EFS', // AWSBackup 'WarmStorage-ByteHrs-EFS', //AWSBackup 'WarmStorage-ByteHrs-DynamoDB', //AWSBackup 'MagneticStore-ByteHrs', // EBS Backup 'ColdStorage-ByteHrs-DynamoDB', //AWSBackup 'WarmStorage-ByteHrs-S3', // S3 'AMP:MetricStorageByteHrs', 'TimedStorage-INT-AIA-ByteHrs', // S3 Glacier 'TimedStorage-GIR-ByteHrs', // S3 Glacier 'ArchiveTimedStorage-ByteHrs', // EFS Archive tier (Magnetic) 'ArchiveTimedStorage-SmallFiles', // EFS Archive small file overhead (Magnetic) 'IATimedStorage-ByteHrs', // EFS Infrequent Access (Magnetic) 'IATimedStorage-ET-ByteHrs', // EFS IA Elastic Throughput (Magnetic) 'IATimedStorage-ET-SmallFiles', // EFS IA small file overhead (Magnetic) 'IATimedStorage-SmallFiles', // EFS IA small file overhead (Magnetic) 'TimedStorage-INT-AA-ByteHrs', // S3 Intelligent-Tiering Archive Access 'Tables-TimedStorage-ByteHrs', // S3 Tables (Apache Iceberg) 'TimedStorage-EBS-ByteHrs', // Generic EBS storage (snapshots/cold tiers) 'TimedStorage-GigabyteHrs', // Generic S3/EFS Standard storage 'TimedStorage-GIR-SmObjects', // S3 Glacier Instant Retrieval (Small Objects) 'TimedStorage-GlacierByteHrs', // S3 Glacier archival storage 'TimedStorage-Z-ByteHrs', // One Zone storage (EFS/S3, Magnetic) 'TimedStorage-XZ-ByteHrs', // Cross-Zone archival storage 'ElasticStorageUsage', // S3 Intelligent-Tiering (HDD profile) 'EarlyDelete-GIR', // S3 Glacier Instant Retrieval 'EarlyDelete-GIR-SmObjects', // S3 Glacier Instant Retrieval (small objects) 'StorageUsedInS3ByteHour', // Standard S3 object storage (HDD profile) 'SnapshotArchiveEarlyDelete', // EBS snapshot archive early deletion ] export const NETWORKING_USAGE_TYPES: string[] = [ 'AWS-Out-Bytes', 'DataTransfer-Out-Bytes', 'DataTransfer-Regional-Bytes', 'TotalDataXfer-Out-Bytes', 'Egress-Bytes', 'UploadBytes', 'UPLOAD', 'ExportDataSize-Bytes', 'DOWNLOAD', 'Data-Bytes-Out', 'VpcEndpoint-Bytes', 'TransitGateway-Bytes', 'Retrieval', 'BilledBytes', 'DataTransfer-xAZ-Out-Bytes', // Cross-AZ outbound data movement 'DataTransfer-xAZ-In-Bytes', // Cross-AZ inbound data movement 'DataTransfer-AZ-Out-Bytes', // Intra-AZ outbound network traffic 'DataTransfer-AZ-In-Bytes', // Intra-AZ inbound network traffic 'VpcPeering-Out-Bytes', // Inter-VPC peering outbound traffic 'VpcPeering-In-Bytes', // Inter-VPC peering inbound traffic 'DataTransferOut', // Generic outbound internet data transfer 'DataTransfer-Out-OBytes', // CloudFront origin fetch data movement 'DataXfer-Out-Free-Bytes', // Outbound traffic (Free tier) 'DataProcessing-Bytes', // Load balancer data plane processing 'Traffic-GB-Processed', // ELB/Gateway data plane traffic 'S3RTC-In-Bytes', // S3 Replication Time Control inbound 'S3RTC-Out-Bytes', // S3 Replication Time Control outbound 'VPCLattice-DataProcessing-Bytes', // VPC Lattice managed data plane traffic 'AWS-In-Bytes', // Regional inbound data transfer 'MRAP-Out-Bytes', // Multi-Region Access Point outbound 'ImportDataSize-Bytes', // Data import transfer volume ] export const BYTE_HOURS_USAGE_TYPES: string[] = [ 'ByteHrs', 'SmObjects', 'EarlyDelete-GDA', 'EarlyDelete-SIA', 'EarlyDelete-ZIA', 'GlacierByteHrs', 'ByteHrs-EFS', 'ByteHrs-DynamoDB', 'EarlyDelete-GIR', ] export const UNKNOWN_USAGE_TYPES: string[] = [ 'AmazonEKS-Hours:perCluster', 'SoftwareUsage', 'BundleUsage', 'Small-Directory-Usage', 'MicrosoftAD-DC-Usage', // AWS Directory Service Microsoft AD (all sizes: Std, Lrg, etc.) 'InactivePipelines', 'Lambda-Provisioned', 'ets-hd-success', 'ets-sd-success', 'BuildDuration', 'Build-Min', 'AW-HW-User-Usage', 'TransitGateway-Hours', 'VpcEndpoint-Hours', 'VPN-Usage-Hours', 'NatGateway-Hours', 'NatGateway-Bytes', 'LoadBalancerUsage', 'IdleAddress', 'UnusedStaticIP', 'AdditionalAddress', 'ResolverNetworkInterface', 'DataScanned', 'FastSnapshotRestore', 'GMD-Metrics', 'Dollar', 'Airflow-SmallEnvironment', 'MemoryStore-ByteHrs', 'Output-SD-Hours', 'Output-HD-Hours', 'Output-FullHD-Hours', 'Input-Standard-Hours', 'Airflow-SmallWorker', 'AppRunner-Provisioned-GB-hours', 'AppRunner-GB-hours', // App Runner memory provisioning (DRAM, not storage) 'ApiGatewayCacheUsage', 'PortUsage', 'SharedMsftAD-Usage', 'Kafka.mcu.general', 'SnapshotArchiveStorage', 'PaidPrivateCA', 'Firehose-VpcDelivery-Hours', 'Airflow-MediumEnvironment', 'IPAddressManager-IP-Hours', 'Gateway:VTL-Storage', 'PublicIPv4:InUseAddress', // Public IPv4 address in use 'VPCLattice-Service-Hourly', // VPC Lattice service fee 'CloudWAN-Attachment-Hours', // Availability fee for logical network attachment 'Guardrail-', // Bedrock Guardrail safety scanning (abstracted security unit) 'Column-Statistics-DPU-Hour', // Glue DPU for column statistics (serverless abstraction) 'CodeExecutionInDPUHours', // Athena Spark notebook DPU execution 'Canvas:Session-Hrs', // SageMaker Canvas application session time 'Logs-LiveTail', // CloudWatch Logs live session duration 'Application-Signals', // CloudWatch application health monitoring 'MLflow:TrackingServerCompute', // SageMaker MLflow tracking server (Small/Medium/Large) 'Airflow-MicroEnvironment', // MWAA micro Airflow environment 'MemoryOptimizedStoppedGraphUsage', // Neptune stopped graph memory reservation (NCU units) 'Small-SimpleAD-Usage', // AWS Directory Service Simple AD 'AmazonEKS-Hours:extendedSupport', // EKS extended K8s version support (managed control plane) 'Q-Business-Starter-Index-free', // Amazon Q Business free-tier knowledge index 'KafkaServerless-ClusterHours', // MSK Serverless cluster base hourly fee 'VpcEndpoint-Resource-Hours', // VPC endpoint resource provisioning fee 'VpcLattice-Service-Network-Resource-Hours', // VPC Lattice service network resource fee 'CachedData:Valkey', // That is RAM memory; it will not be categorized under SSD. 'CachedData:Redis', // That is RAM memory; it will not be categorized under SSD. 'CachedData:Memcached', // That is RAM memory; it will not be categorized under SSD. ] export const UNSUPPORTED_USAGE_TYPES: string[] = [ 'EMR-EKS-EC2-GBHours', // "Double counted" with EC2 usage rows, so ignore. 'APS3-EMR-EKS-EC2-vCPUHours', // "Double counted" with EC2 usage rows, so ignore. 'ECS-EC2-GB-Hours', // "Double counted" with EC2 usage rows, so ignore. 'ECS-EC2-vCPU-Hours', // "Double counted" with EC2 usage rows, so ignore. 'Dollar', // AWSDeveloperSupport - no energy associated with support cost 'HostBoxUsage', // "Double counted" with resource usage rows, so ignore. 'Runtime:Consumption-based:Memory', // Serverless memory allocation, avoid double-counting with compute. 'SERVERLESS-MemoryGBHours', // RAM-time, avoid double-counting server carbon. 'EKS-Auto:', // EKS Auto Mode management fees, hardware tracked in EC2/Fargate line items ( EKS-Auto:<instance>-management-hours ). 'ECS-Anywhere-Instance-hours', // On-premises management fee, no AWS compute hardware. 'EnterpriseServer', // It represents license cost. "Double counted" with EC2 usage rows, so ignore. 'MemoryOptimizedGraphUsage', // Neptune NCU abstraction, no direct hardware mapping. 'ConnectorSync', // Kendra data connector sync, no direct hardware mapping. 'KendraDeveloperEdition', // Kendra developer edition index, abstracted managed service. 'Kendra-GenAI-', // Kendra GenAI capacity, abstracted managed service. 'OpenSearchExtendedSupport', // Double-count the emissions already captured by ES.instance ] export const LINE_ITEM_TYPES: string[] = [ 'Usage', 'DiscountedUsage', 'SavingsPlanCoveredUsage', ] export enum KNOWN_USAGE_UNITS { HOURS_1 = 'Hrs', HOURS_2 = 'Hours', HOURS_3 = 'hours', VCPU_HOURS = 'vCPU-Hours', DPU_HOUR = 'DPU-Hour', ACU_HOUR = 'ACU-Hr', GB_HOURS = 'GB-Hours', GB_MONTH_1 = 'GB-Mo', GB_MONTH_2 = 'GB-Month', GB_MONTH_3 = 'GB-Mp', GB_MONTH_4 = 'GB-month', GB_1 = 'GB', GB_2 = 'GigaBytes', SECONDS_1 = 'seconds', SECONDS_2 = 'Second', LAMBDA_SECONDS = 'Lambda-GB-Second', } export const AWS_QUERY_GROUP_BY: QUERY_DATE_TYPES = { day: 'day', week: 'week', month: 'month', quarter: 'quarter', year: 'year', }