Teaching Cloud Infrastructure and Scalable Application Deployment in an Undergraduate Computer Science Program
Making successful use of cloud computing for deploying scalable web applications requires nuanced approaches to both system design and deployment methodology, involving reasoning about the elasticity, cost, and security models of cloud services. Students commonly interact with cloud abstractions early in their technical careers, including during internships and academic research. Building cloud-native applications without a firm understanding of the fundamentals of cloud engineering can leave students susceptible to cost and security pitfalls common to cloud platforms. Yet, cloud computing is not commonly taught at the undergraduate level, because the technology and practices behind modern cloud deployment, such as containerization and infrastructure-as-code (IaC), have only recently matured into a set of general principles independent from specific providers’ offerings. To address this gap, we designed an undergraduate-level course around these principles that framed cloud infrastructure deployment as a software engineering practice in support of scalable web applications, emphasizing the value of both cloud deployment and application design skills in building robust cloud-native systems. Our course featured a number of hands-on assignments that gave students experience with modern, best-practice concepts and tools such as IaC, containerization, observability, serverless computing, and continuous integration and deployment. We describe the design of the course, our experience teaching its initial offering in Winter 2024, and provide our reflections on what worked well and potential areas for improvement. Our course material is publicly available at (website redacted for review).