A containerized web application for managing and monitoring AWS resources across multiple accounts and regions.
All validations run on push and pull requests to main. The Release workflow runs on push to main (Release Please: creates/updates the release PR) and on release published (builds zip and uploads it); merge the release PR to publish the GitHub release.
CloudScope is an evolving project.
This project originated as an internal tooling experiment and reflects an older idea that continues to evolve over time. While it is actively maintained on an as-needed basis, it is not intended to be a production-grade AWS management or monitoring platform.
CloudScope is best suited for:
- Local or lab environments
- Lightweight AWS resource visibility across profiles and regions
- Learning, experimentation, and customization
- Small-scale internal use
Features, architecture, and implementation details may change as the project evolves. Production hardening, enterprise support, and long-term stability guarantees are out of scope for this repository.
The application is split into three main components:
-
API Service (Port 5000)
- Handles AWS resource management
- Provides RESTful endpoints
- Manages database operations
- Built with Flask-RESTful and SQLAlchemy
-
Frontend (Port 3000)
- React SPA (CloudScope UI)
- Communicates with API service
- Built with Vite, React, TypeScript
-
Database Service
- PostgreSQL database
- Stores AWS profile information
- Manages application state
- Docker and Docker Compose
- Make (optional, but recommended)
- AWS credentials with appropriate permissions
-
Clone the repository:
git clone https://github.com/yourusername/aws_inventory.git cd aws_inventory # or your clone directory
-
(Optional) Install all required deps for development (Python + frontend):
make setup
-
Start the application:
make up
-
Access the application:
- Web UI: http://localhost:3000
- API: http://localhost:5001
Main — Welcome page with connection status and Explore Resources (Compute, Data, Cache, Storage, Networking, Messaging, Services).
Dashboard — AWS resources by category with stats and collapsible resource tables (e.g. EC2 Volumes).
Profiles — Add and manage AWS profiles (Add new profile, Import by paste, Set Role); view and select active profile.
Settings — Service health (API, Database, AWS Connection), version, environment, storage, and technology stack.
make build- Build all Docker imagesmake up- Start all containersmake down- Stop and remove all containersmake logs- View logs from all containersmake ps- List running containersmake clean- Remove all containers, volumes, and imagesmake test/make test-code- Run tests (pytest in API container)make lint- Lint Python (ruff) and frontend (eslint)make format- Format Python (ruff) and frontend (prettier)make setup- Install all required deps (Python + frontend; run once after clone)make install-dev- Install dev deps with pip (ruff; no uv required)make uv/make install- Install Python deps with uv if installed (optional)make migrate- Run database migrations
Development shortcuts:
make dev-api- View API service logsmake dev-frontend- View frontend logsmake dev-db- View database logs
Database management:
make db-shell- Open PostgreSQL shellmake db-backup- Create database backupmake db-restore FILE=<backup-file>- Restore database from backup
Service management:
make restart-api- Rebuild and restart API servicemake restart-frontend- Rebuild and restart frontendmake health-check- Check services health
GET /api/profiles- List all AWS profilesPOST /api/profiles- Create new AWS profileGET /api/profiles/<id>- Get specific profilePUT /api/profiles/<id>- Update profileDELETE /api/profiles/<id>- Delete profile
GET /api/resources- Get AWS resources for active profile
GET /health- Service health status
- Use Conventional Commits for messages:
feat:,fix:,docs:,chore:, etc. - Release Please opens a release PR from conventional commits; merging it creates the GitHub release.
- CI runs ruff (lint + format) and commitlint on PRs.
- Lint/format: Run
make install-dev(orpip install ruff), thenmake lint-apiandmake format-api. You do not need uv. - Optional: if you use uv, run
make uvto install deps; lint/format will use ruff either way.
.cursor/and.cursorrulesare in.gitignoreand are never shipped in releases.- If
.cursorwas ever committed, run once:git rm -r --cached .cursorthen commit.
aws_inventory/ # or cloudscope/
├── api/
│ ├── app.py
│ ├── aws_classes.py
│ ├── models.py
│ ├── migrations/
│ └── requirements.txt
├── frontend/
│ ├── src/ # React app (Vite + TypeScript)
│ ├── package.json
│ └── Dockerfile
├── docker-compose.yml
├── Makefile
└── README.md
-
API Changes:
- Add new endpoints in
api/app.py - Update models in
api/models.py - Create database migrations if needed
- Add new endpoints in
-
Frontend Changes:
- Add or update components in
frontend/src/ - API integration in
frontend/src/api/and hooks infrontend/src/hooks/
- Add or update components in
-
Create a new migration:
make migrate
-
Apply migrations:
make up
Environment variables:
FLASK_ENV- Environment (development/production)DATABASE_URL- PostgreSQL connection URLAPI_BASE_URL- API service URLFLASK_SECRET_KEY- Flask session secret key
- AWS credentials are stored securely in the database
- All sensitive data is encrypted at rest
- CORS is enabled for API service
- Non-root users are used in containers
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.



