Methodology
Spruce uses third-party resources and models to estimate the environmental impact of cloud services. It enriches cost usage reports (CUR) with additional columns, allowing users to do GreenOps and build dashboards and reports.
Unlike the information provided by CSPs (Cloud Service Providers), Spruce gives total transparency on how the estimates are built.
The overall approach is as follows:
- Estimate the energy used per activity (e.g for X GB of data transferred, usage of an EC2 instance, storage etc...)
- Add overheads (e.g. PUE, WUE)
- Apply accurate carbon intensity factors - ideally for a specific location at a specific time
- Where possible, estimate the embodied carbon related to the activity
This is compliant with the SCI specification from the GreenSoftware Foundation.
Enrichment modules
Spruce generates the estimates above by chaining EnrichmentModules, each of them relying on columns found in the usage reports or produced by preceding modules.
For instance, the AverageCarbonIntensity.java module applies average carbon intensity factors to energy estimates based on the region in order to generate operational emissions.
The list of columns generated by the modules can be found in the SpruceColumn class.
The enrichment modules are listed and configured in a configuration file. If no configuration is specified, the default one is used.
ccf.Storage
Provides an estimate of energy used for storage by applying a flat coefficient per Gb, following the approach used by the Cloud Carbon Footprint project. See methodology for more details.
Populates the column energy_usage_kwh
.
ccf.Networking
Provides an estimate of energy used for networking in and out of data centres. Applies a flat coefficient per Gb, following the approach used by the Cloud Carbon Footprint project. See methodology for more details.
Populates the column energy_usage_kwh
.
boavizta.BoaviztAPI
Provides an estimate of final energy used for computation (EC2, OpenSearch, RDS) as well as the related embodied emissions using the BoaviztAPI.
Populates the column energy_usage_kwh
and embodied_emissions_co2eq_g
.
boavizta.BoaviztAPIstatic
Similar to the previous module but does not get the information from an instance of the BoaviztAPI but from a static file generated from it. This makes it simpler to use Spruce.
ccf.PUE
Applies a fixed ratio for Power Usage_Effectiveness to row for which energy usage has been estimated, following the approach used by the Cloud Carbon Footprint project. See CCF methodology for more details.
Populates the column power_usage_effectiveness
.
electricitymaps.AverageCarbonIntensity
Adds average carbon intensity factors generated from ElectricityMaps' 2024 datasets. The life-cycle emission factors are used.
Populates the columns carbon_intensity
.
OperationalEmissions
Computes operational emissions based on the energy usage, average carbon intensity factors and power_usage_effectiveness
estimated by the preceding modules.
Populates the columns operational_emissions_co2eq_g
.
operational_emissions_co2eq_g
is equal to energy_usage_kwh
* carbon_intensity
* 'power_usage_effectiveness'.