A web-based UI for provisioning AWS S3 buckets and Azure Storage Accounts using Crossplane.
Everything automated! Just run this single command:
./scripts/start-all.shThis script will:
- ✅ Check all requirements
- ✅ Create a Kind Kubernetes cluster
- ✅ Install Crossplane and providers
- ✅ Apply all resource definitions
- ✅ Start the backend server
- ✅ Start the frontend development server
- ✅ Open the UI at http://localhost:5173
Before running any stack setup script, verify all required tools are installed:
./scripts/check-prerequisites.shThis will check for:
- Required for stack scripts:
kubectl,helm,kind - Required for backend development: Go 1.19+
- Required for frontend development: Node.js 16+, npm
- Required for Kind clusters: Docker (daemon must be running)
The script provides installation instructions for any missing tools.
After running the script, you'll have:
- Backend API: http://localhost:8080
- Frontend UI: http://localhost:5173
- Kubernetes Cluster: Kind cluster named 'crossplane-cluster'
- Crossplane: Fully configured with AWS and Azure providers
To stop all services and clean up:
./scripts/cleanup.shTo keep clusters lean and avoid TLS timeout issues, provision only the providers you need. Each stack script automatically checks prerequisites first, then spins up its own Kind cluster, installs Crossplane, and applies a minimal provider bundle. A matching cleanup script tears the cluster down.
Note: You can also run the prerequisites check manually:
./scripts/check-prerequisites.sh| Cloud | Setup | Cleanup | Providers Included |
|---|---|---|---|
| AWS | ./scripts/setup-aws-stack.sh |
./scripts/cleanup-aws-stack.sh |
provider-aws-s3, provider-aws-ec2 |
| Azure | ./scripts/setup-azure-stack.sh |
./scripts/cleanup-azure-stack.sh |
provider-family-azure, provider-azure-compute, provider-azure-network, provider-azure-storage (4 providers) |
| GCP | ./scripts/setup-gcp-stack.sh |
./scripts/cleanup-gcp-stack.sh |
provider-family-gcp, provider-gcp-compute, provider-gcp-container, provider-gcp-storage |
For Azure, use these granular scripts to avoid cluster overload. Each installs only 2 providers (family + specific service):
| Resource Type | Setup | Cleanup | Providers Included |
|---|---|---|---|
| Storage | ./scripts/setup-azure-storage-only.sh |
./scripts/cleanup-azure-storage-only.sh |
provider-family-azure, provider-azure-storage (2 providers) |
| Compute | ./scripts/setup-azure-compute-only.sh |
./scripts/cleanup-azure-compute-only.sh |
provider-family-azure, provider-azure-compute (2 providers) |
| Network | ./scripts/setup-azure-network-only.sh |
./scripts/cleanup-azure-network-only.sh |
provider-family-azure, provider-azure-network (2 providers) |
Tip: Use the resource-specific scripts (e.g.,
setup-azure-storage-only.sh) to minimize cluster load and avoid TLS handshake timeouts. Run only one stack at a time. If you need to switch resources, execute the cleanup script before launching the next stack.
- AWS S3 Management: List, create, and delete S3 buckets
- Azure Storage Management: List, create, and delete Azure Storage Accounts
- Credential Management: Secure storage of cloud provider credentials
- Real-time Status: Live status updates from Kubernetes
GET /api/health- Service health status
GET /api/s3- List S3 bucketsPOST /api/s3- Create S3 bucketDELETE /api/s3/:name- Delete S3 bucket
GET /api/azure/storage- List Azure Storage AccountsPOST /api/azure/storage- Create Azure Storage AccountDELETE /api/azure/storage/:name- Delete Azure Storage Account
POST /api/credentials/aws- Store AWS credentialsPOST /api/credentials/azure- Store Azure credentialsDELETE /api/credentials/:name- Delete credentials
- Backend: Go REST API with Gin framework
- Frontend: React with Vite
- Infrastructure: Crossplane for cloud resource provisioning
- Storage: Kubernetes secrets for credential management
- State: Direct Kubernetes queries (no database)
With Hot-Reload (Recommended):
cd backend
# Install air if not already installed
go install github.com/cosmtrek/air@latest
# Run with hot-reload (auto-restarts on file changes)
airWithout Hot-Reload:
cd backend
go mod tidy
go run main.goNote: The
start-all.shscript automatically uses Air for hot-reload if available. Changes to Go files will automatically restart the server.
cd frontend
npm install
npm run devIf something goes wrong:
- Check logs: Look at
backend.logandfrontend.log - Restart everything: Run
./scripts/cleanup.shthen./scripts/start-all.sh - Check Kubernetes:
kubectl get pods -n crossplane-system
To clean up all resources:
./scripts/cleanup.sh