I'm planning a development environment on the cloud. My target platform is Microsoft .Net and preferred cloud id Amazon AWS (although I'm open for suggestions).
I'm planning to purchase a High-Memory On-Demand Instance and deploy one guest VM per developer within it. Here are my queries:
- Is this topology advisable?
- How would a developer directly login and work with the guest VMs?
- Besides having a good broadband Internet connection (and also a backup connection), what other care need to be taken at developer end?
- How will I be able to manage resources on my development environment? Any tools? Services?
Thanks.
No, that's not advisable. For one, running virtualization on top of virtualization is going to perform poorly. And most developers don't like to work against a remotely hosted virtual machine, where every little operation has a bit of delay (due to ~50 - ~200 ms network latency).
The most common solution is something along these lines:
Your CI server, Test and Staging servers could happily live in the cloud (easier with something like Virtual Private Cloud). So could your code repository, but if you don't prefer it on-premises, then you should just outsource it to a hosted Subversion / Git service.
Edit: You could test it (that's one of the benefits of cloud computing -- you can spool up a server in a matter of minutes, and test how it actually performs for you). But how about running a Windows 2008 R2 server in-house, and setting up VMs on that server instead? Near-zero network latency, and not hard to do at all.
Before we go any further -- why don't you ask your developers how they're used to doing things, and what they prefer...
AWS instances are already virtual machines running on a hypervisor. It is not a good idea to then run another layer of virtualization so that you've got developers working in a VM inside a VM on hardware that's at the other end of a WAN connection. I am skeptical that it is even technically possible - but if it is I'm sure that performance is going to be awful.
All the VM technologies you would use in this setup require hardware virtulization at the CPU level. Since EC2 instances are already running on a hypervisor, you don't have platform access to the bare metal to achieve this.
If you REALLY want this, I would recommend a dedicated server somewhere and just VPN it into your world.
If you are looking for cloud benefits, you prob need to decide on an appropriate unit (one box per dev, one box per team, etc) and then choose an instance size appropriate to those needs. To get the benefit of the cloud setup here, you also need to be spinning instances up/down based on needs. The usage patterns of a dev team really don't themselves to this setup.