diff --git a/WRITEUP.md b/WRITEUP.md index ae6a57632..25e9e8dbc 100644 --- a/WRITEUP.md +++ b/WRITEUP.md @@ -1,12 +1,27 @@ -# Write-up Template +1. Azure Virtual Machines (VM) – Analysis +Cost +Azure VMs generally have higher operational costs because you pay for the VM compute, OS disk, data disks, networking, and associated services continuously. In addition, costs increase due to maintenance overhead such as patching, monitoring, and backups. While smaller VM sizes can reduce cost, VMs are still more expensive than PaaS options for simple web applications. +Scalability +VM scalability requires manual configuration using either Virtual Machine Scale Sets or Load Balancers. Scaling up or out involves provisioning additional VMs, configuring networking, and ensuring the application is stateless. This adds complexity and slows down response to traffic spikes compared to managed services. +Availability +High availability is not built‑in by default. To achieve resilience, VMs must be deployed across Availability Sets or Availability Zones, which increases configuration effort and cost. Failure to design for redundancy can lead to downtime if a VM fails. +Workflow +The development and deployment workflow is more complex and time‑consuming. Developers must manage OS updates, security patches, runtime installation (Python, Flask, dependencies), and server configuration. CI/CD pipelines require extra setup, and troubleshooting often involves VM‑level access. -### Analyze, choose, and justify the appropriate resource option for deploying the app. +2. Azure App Service – Analysis +Cost +Azure App Service offers lower and predictable costs, especially using the Dev/Test (Free or Basic) tier. You pay for the App Service Plan rather than individual VMs, and infrastructure management costs are eliminated. This makes App Service cost‑effective for small to medium‑scale web applications like a CMS. +Scalability +App Service supports built‑in vertical and horizontal scaling. Vertical scaling is achieved by changing the pricing tier (more CPU/RAM), while horizontal scaling automatically adds or removes instances based on demand. This scalability is easier, faster, and requires no infrastructure redesign. +Availability +High availability is built in by default. Azure automatically handles failover, health monitoring, and load distribution across instances. This ensures better uptime without requiring manual configuration of redundancy components. +Workflow +The workflow is developer‑friendly and streamlined. App Service integrates natively with GitHub, Azure DevOps, and Git repositories for continuous deployment. Developers focus purely on application code, while Azure manages OS, patching, and runtime updates. -*For **both** a VM or App Service solution for the CMS app:* -- *Analyze costs, scalability, availability, and workflow* -- *Choose the appropriate solution (VM or App Service) for deploying the app* -- *Justify your choice* +3. Chosen Deployment Option: Azure App Service +Azure App Service is the more appropriate solution for deploying the CMS application. +The CMS is a standard web application with predictable workloads, and it does not require deep OS‑level control. App Service provides lower cost, built‑in availability, and easier scalability, allowing the development team to focus on feature development rather than infrastructure management. Additionally, native CI/CD support significantly improves deployment speed and reliability. -### Assess app changes that would change your decision. - -*Detail how the app and any other needs would have to change for you to change your decision in the last section.* \ No newline at end of file +4. Impact of the Decision on the Application +By choosing Azure App Service, the application must follow PaaS best practices, such as being mostly stateless and storing images in Azure Blob Storage instead of the local file system. The Flask app must be configured to use environment variables for configuration (database connection strings, storage keys) rather than relying on OS‑level settings. +Additional changes include ensuring the application uses supported Python versions, conforms to App Service runtime constraints, and leverages managed Azure services (Azure SQL, Blob Storage) instead of self‑managed components. These changes simplify operations while slightly reducing infrastructure control compared to VMs.