Move beyond a local demo into an operable cloud workload.
The original FastAPI application was progressively hardened with cloud hosting, telemetry, Docker packaging, automated deployment, and secure runtime configuration.
A FastAPI weather application engineered into a secure, observable Azure workload with containers, CI/CD, structured telemetry, alerting, and managed-identity-backed secret delivery.
The Container App can scale to zero. After idle time, the first request may take roughly 30–60 seconds while the container starts; subsequent requests return normally.
The original FastAPI application was progressively hardened with cloud hosting, telemetry, Docker packaging, automated deployment, and secure runtime configuration.
Container Apps runs the live workload, ACR stores the image, GitHub Actions handles deployment, Azure Monitor provides operational visibility, and Key Vault delivers the WeatherAPI secret through managed identity.
The final delivery path separates application development, container packaging, image storage, validation, and production hosting.
Python 3.12, Jinja2, SQLite, HTTPX, favourites, search, forecast, and /health.
Production-style image using Gunicorn and Uvicorn workers on port 8000.
Private image storage used by the Azure container runtimes.
Short-lived validation runtime used before the final Container Apps deployment.
Public HTTPS ingress, scale-to-zero, and the final production-style workload.
The project deliberately treats telemetry, alerting, and secret management as part of the platform rather than extras around the application.
Captures requests and application behaviour through Azure Monitor OpenTelemetry.
Weather request start, success, latency, HTTP failures, and context.
KQL-based scheduled-query alert detects WeatherAPI HTTP errors.
Email action confirms the alert path reaches the operator.
The WeatherAPI key is referenced securely by the Container App.
Real screenshots from application hosting, containers, telemetry, monitoring, alerting, troubleshooting, and CI/CD.
The App Service deployment failed until Gunicorn was included in the application dependencies.
Application Insights existed before useful request and trace data flowed; Azure Monitor OpenTelemetry fixed the observability gap.
Scheduled-query alert syntax needed CLI-specific condition/query formatting before deployment succeeded.
Docker, WSL, local port mapping, ACI, and Container Apps each forced the runtime configuration to be explicit.
Key Vault plus Container Apps managed identity replaced plaintext WeatherAPI secret configuration in the final runtime.
The first request may take 30–60 seconds after scale-to-zero.