Anyone who has been paying attention to the cloud computing space, from software engineers to enterprise IT managers, knows that there are significant benefits to adopting this increasingly pervasive technology, be it cost savings, increased efficiency or faster development cycles. But there is still a great deal of friction slowing down the PaaS, SaaS and IaaS adoption process. Even the most forward thinking organizations have a lot of fears and reservations about moving their IT infrastructure to the cloud. They worry about security. They worry about losing control over policies and access. They worry about governance. They worry about over-provisioning or AMI instances being spun up but never being turned off, resulting in costs spiraling out of control. The benefits of moving enterprise IT to the cloud is well know, but that knowledge doesn't alleviate the fear.
But organizations shouldn’t let fear get in the way of trying out something that can make them more efficient and help scale out IT operations cost-effectively, so it makes sense to choose an experiment that’s low-risk and gets you immediate benefits. When it comes to easing your organization into the cloud, development, test and pre-production environments are a great place to start.
If there’s one use case that can really take advantage of cloud’s elasticity, it’s dev/test. Developers need to spin up a production-sized environment for just a couple hours at a time. It’s inefficient to keep on-premise physical infrastructure idle most of the time just to satisfy this sporadic need, but this sort of capacity bursting is the perfect use for cloud infrastructure. Many fears about moving infrastructure to the cloud simply don’t apply to pre-production environments. Companies that are subject to lots of regulatory oversight such as banks or health care providers may be precluded from moving production to the cloud by confidentiality requirements or other data security concerns. But testing applications with dummy data is a much lower-risk scenario.
Even the most forward thinking organizations have a lot of fears and reservations about moving their IT infrastructure to the cloud.
You’re Probably Already Doing Dev/Test in the Cloud
For most companies, doing pre-production in the cloud is more like a stampede than a strategy. Developers get frustrated when they have to wait for IT to provision a test environment, so they just use their corporate credit cards to spin up a test environment with a public cloud service — and neither finance nor IT knows anything about it. Once IT starts to get wind of this, they often discover that it’s not even a single service; different developers are almost certainly using different cloud providers.
Although you probably need to bring these shadow IT deployments under control, you do need to understand why it occurs: Developers’ productivity is often directly correlated to their ability to spin up test environments as and when they need them. If you can provide that kind of flexibility in a common platform for your developers, they’ll use it — and you’ll be able to keep track of costs as well as maintain a secure environment more easily.
Flexibility for Large Pre-production Environments
Organizations are doing pre-production in the cloud because they don’t have enough in-house resources for building an appropriate automated test environment. You may need a development and test environment that is several times the size of your production environment to allow development to occur in parallel. The costs of building such a large pre-production environment can be prohibitive, plus it will age over time and you certainly don’t need it 24/7. Instead, it can be more appropriate to use highly elastic automated cloud services. Now your developers and testers have a pre-production environment available on demand as they need it, and your company has a manageable operations expense, instead of a capital expense for a large, always-on, underutilized resource.
Another reason companies are adopting the cloud for pre-production is for provisioning speed and automation. For example, let’s say you have five or six developers working on different features. Each one will need an environment that looks very much like production, but for just the two or three hours per day they’re working on their feature. They’re all going to have different working timelines, and there’s going to be a lot more churn in your development, testing and UAT environments. If you’re using cloud services and cloud automation, you’ll have the flexibility and elasticity to give your developers self-service environments, as they need them. They won’t have to wait, and your infrastructure will be able to handle the demand.
Testing Performance in the Cloud
Performance is generally more variable in the cloud. You can resolve that by doing performance testing locally on bare metal machines, where you don’t have a hypervisor in the way. Automated load testing in the cloud can get complicated, and you have to be prepared for more variability. You may have to run more tests, or keep to a certain baseline. But cloud vendors are getting much better at addressing variability of performance in the cloud. In all our testing with Google Compute Engine, we’ve found disk I/O and CPU components to have excellent performance. Amazon offers excellent value, and we’ve found that they deliver more consistent performance with larger deployments, especially within the same availability zone.
If you’re using cloud services and cloud automation, you’ll have flexibility and elasticity.
Preparing for Production in the Cloud
Running pre-production in the cloud is a logical step towards deploying production on the cloud, yet is useful in its own right. If you’ve spent time running your pre-production environments in the cloud, you now have developers and IT operations people who are familiar with cloud services and behavior. Now you’re significantly more informed about the option of moving part of your production to the cloud — and possibly all of it — after you solve your regulatory or cultural issues with cloud.
The cloud is not the right answer for everyone’s production needs, but moving your pre-production there is a sensible and relatively low-risk way to test whether the cloud is right for you.
CTO Nigel Kersten came to Puppet Labs from Google HQ in Mountain View, where he was responsible for the design and implementation of one of the largest Puppet deployments in the world. He's been a sysadmin for Linux and Mac deployments since before Mac OS became a UNIX, and was voted one of the 25 Most Influential People in the Mac Technical Community in 2006.