AWS Organizations reporting: cost history, billing charts, OU group management, Slack alerts, and optional HTML email notifications.
AWSManager/
├── aws_reporter/ # Scheduled reports, Slack, resource listing
│ ├── run.py # Main scheduler entrypoint
│ └── utils/
│ ├── config.py # Env-based settings
│ ├── scheduler.py
│ ├── slack_util.py
│ └── Models/
├── dashboard/ # Flask dashboard scaffold
├── examples/ # Sample account list JSON
├── config.example # AWS CLI profile template
└── credentials.example
- 7D / 15D / 30D resource usage and cost history
- Billing graphs (24h, 7d)
- Move accounts between Organizations OUs (read-only, disabled, active)
- Slack billing alerts and CSV report uploads
- Optional HTML email notifications via SMTP
git clone https://github.com/Theemiss/AWSManager.git
cd AWSManager
pip install -r requirements.txt
cp .env.example .env
# edit .env
cd aws_reporter
python run.py| Variable | Purpose |
|---|---|
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY |
Organizations management credentials |
AWS_PARENT_OU_ID |
Root OU for account moves |
AWS_READ_ONLY_OU_ID / AWS_DISABLED_OU_ID / AWS_ACTIVE_OU_ID |
Target OUs |
SLACK_BOT_TOKEN |
Slack Web API |
SLACK_WEBHOOK_URL / SLACK_TEST_WEBHOOK_URL |
Incoming webhooks |
SLACK_WEBHOOK_ENV |
TEST or production webhook selector |
SLACK_HISTORY_CHANNEL |
Channel ID for history uploads |
REPORT_START_DATE / REPORT_END_DATE |
Default report window |
LIMIT_DISABLE / LIMIT_DELETE |
Cost thresholds for OU moves |
NOTIFY_FROM_EMAIL / SMTP_* |
Email notifications |
EC2_STOP_ACCOUNT_ID |
Optional account filter for stop job |
FLASK_SECRET_KEY |
Dashboard session secret |
See .env.example for a full template.
Generated files under aws_reporter/utils/reports/ are gitignored. Seed from examples/account_list.example.json for local testing.
docker build -t awsmanager .Pass AWS and Slack env vars at runtime.
MIT - see LICENSE.