System configuration, hold the sauce

Let’s dive into building systems that build themselves.

Sound complicated? It’s not. And making the switch can unlock some huge efficiency and flexibility improvements in your environment.

Too much secret sauce

Traditionally you build a system by gathering the recommended specifications from your software vendor or dev team, perform some sizing and then install your servers. You would go through all the common steps of configuring the operating system, getting the right version of java or .NET installed and setting up your application servers. At this point you bring in your application specialist and they finish installing the app, usually iterating through a number of changes to get the system tuned just right. This tuning often extends right through TEST and UAT.

At the end of it all, you usually have a nice, fast, working… black box. The secret sauce that has gone into the build has not been captured – especially not at 3am in the morning trying to get load testing over the line – and the thought of losing that config and starting from scratch is pretty scary. Now… track the history of this configuration over the remaining 5 years of its service life. Throw in an application upgrade or two along the way and things get pretty messy.

Computing has undergone some dramatic shifts in recent years. Cloud computing has come of age and everyone now has access to world leading infrastructure without any capital investment or specialised skills. To build it, just press go. In line with this, IT environments are becoming more hybrid. You will have some services on-premise, some systems in an IaaS cloud and others in co-lo facilities. This is awesome: the ability to utilise a best of breed solution for a particular problem is incredibly powerful and it becomes even more so if you can deploy and manage your systems effectively without caring where they are running.

Lets look at that.

I will replace you with a tiny shell script

This is where configuration management comes in, along with fostering a DevOps mindset in your teams. Spending large amounts of time on infrastructure kills the value you could be delivering by working on applications and business process. By automating, optimising and minimising the time spent on back of house work you can start to really ramp up IT productivity and deliver more things your business cares about.

With the right toolset you can capture exactly how your infrastructure and application is built and define it in code. Meaning that everything from the network firewall, storage, machine, operating system, services and applications are defined as part of your configuration. Everything becomes modular and you even get version control!

That pesky java heap size setting that keeps weblogic online is captured, the critical change to the web.config file in your ASP.NET app is never missed and your database server is always installed exactly to spec. It even gets put back to its original state when it gets changed ‘just for testing’ and forgotten about.

Some of the awesome things you can do with a managed configuration:

  • Automate your deployments. Start your application stack anywhere on-premise or in the cloud, using a blend of the best resources.
  • Leverage automatic scaling when things heat up. Need more nodes? Don’t worry, they will auto deploy and add themselves to production.
  • Application upgrades and patching are faster and easier to integrate.
  • Make your dev and test teams super efficient with automatic refreshes of their environments.
  • Everything is 100% consistent all of the time.
  • No black boxes. Your environment becomes self documenting with a version controlled history.

As IT matures, it is critical to make the switch and spend time on adding value. Value that usually happens closer to the application and how it is used out in the field. Start small. Just by doing something as simple as putting your service accounts, DNS settings or a few config files under management you are one step further along the path to eliminating repetitive low value work.

From a tools perspective, Chef from OpsCode is making this really easy to achieve. It supports a stack of platforms: Windows and Linux, on-premise or cloud. I’ll be sharing a few blog posts over the coming weeks showing how you can put it to work in your environment.

Chef on Configuration Management:

Chef on Cloud Management:

Stay tuned. In the next post lets get specific and have a look at Chef and how it can help us create and configure a Windows web server on AWS exactly to spec, with a single command line.