As a result, CS149 is a class in performance programming. Sure, if you only wanted to teach how to program in each programming model, then you could virtualize everything and run locally. But if you want meaningful, predictable performance, you had better provide hardware where it is possible to achieve the performance you're asking for.
Even the larger AWS node sizes can be suboptimal for our purposes. The networks on AWS, for example, would be too high latency, low bandwidth, and unpredictable for use with typical MPI applications. Even their dedicated cluster instances still go through 10 Gbps Ethernet, with performance that continually lags behind the specialized networks used in modern supercomputers. So if we gave students an MPI assignment, we wouldn't be teaching them what the actual state of the art in the field is today.