AWS Costs report generation tool
AWS Costs report tool which leverages AWS cost explorer API to create single page HTML report.
- Provides data for every linked account
- Local & S3 persistence
- Single or scheduled execution
- Configurable time windows
- Report data:
- Monthly total forecast
- Last day cost
- Daily cost chart
- Monthly cost chart
- Services cost - top services and daily services cost
- Cost chart per requested tag (available tags for time window are printed to console)
- daily and monthly costs statistics
Python3 for running on machine Docker in order to run inside container make tool in order to execute Makefile targets
You can execute report tool using Makefile targets or directly install / execute report tool (explained below)
Please see Makefile for available targets (options)
it is advisable to use virtual environment
- execute
pip install -r requirements.txt
to install project requirements - execute
python run.py
in this mode reports are generated in 'generated-reports' directory
execute run_in_docker.sh
script to build and run report generation inside docker
reports will be available under <USER_HOME_DIR>/cost_reports
environment variables for both local and docker executions
aws credentials environment variables (required):
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
-
REGION_NAME
-
LOGGING_LEVEL - optional. defaults to INFO
-
CONFIGURATION_FILE - optional. path to configuration file. defaults to 'configuration.json'
Execution is controlled via a configuration file (which is optional) each of the configuration properties can be emitted entirely
{
"report_title": "AWS Costs Report",
"accounts" : {
"1111": "Development",
"2222": "staging",
"3333": "Production"
},
"periods" : {
"monthly_report_months_back": 6,
"services_report_days_back": 30,
"tags_report_days_back": 30,
"daily_report_days_back": 30
},
"filtered_services": [
"Tax",
"AWS Elemental MediaStore",
"Amazon QuickSight",
"AWS Data Pipeline",
"AWS Cost Explorer",
"AWS Key Management Service"
],
"filtered_costs": [
"Credit",
"Refund",
"Upfront"
],
"resource_tags": [
"env"
],
"destinations": {
"local": {
"directory": "generated-reports"
},
"s3": {
"bucket_name": "<unique bucket name>",
"object_key_prefix": "prefix"
}
},
"reports": {
"html": {
"template_name": "default.html"
}
}
"schedule": "*/5 * * * *",
"use_cache": true
}
- report_title - as the name suggests :-)
- accounts - dictionary translating account ids to meaningful names
- periods - reports time frames in days
- filtered_services - list of services to exclude from services cost report
- filtered_costs - list of costs to exclude from cost reports
- resource_tags - environment tags to create cost report for
- destinations - list of report destinations
- reports - report implementations.
- schedule - cron expression for report scheduling (see below)
- use_cache - for development purposes. defaults to false. the latest cached API results will be used
for html report output use 'html' option under 'reports' configuration property (currently the only report implementation) and specify template to use. see example above
###Template Report is generated from jinja template. alternative templates can be placed in report_templates directory and configured in configuration file
cron based report scheduling can be specified by setting 'schedule' configuration option.
for scheduling options please see croniter documentation
Note: seconds interval not supported