If every change is an exception, then you can't automate it.

An application has traditionally run on a machine of some sort, utilizing the machine's hardware and software capabilities. A number of years back, I was responsible for a Windows based system, utilizing MSMQ as part of its operation, for example. These application servers, were the application runtimes for my system.

These are my reflections, lessons learned and brief summary of chapters 11 and 12 of Infrastructure as Code and is part of the Infrastructure as Code series.

Servers are more complex than other types of infrastructure, like network and storage primitives. They have more moving parts and variation, so most teams still spend quite a bit of their time configuring and updating operating systems, packages and configuration files. 

It is useful to assign a role to a server, indicating its purpose. Is this an application server, a dedicated database service, a central monitoring repository? When provisioning servers, it's also useful to use role inheritance. You might have a base role with your monitoring and logging agents of choice and then let your application server role inherit from this one, adding your standard web server.

When testing your server, focus on common issues, variable outcomes and combinations of code. The value of testing is higher as you integrate more elements. This means that it's often valuable to create more tests for the application server role than for the individual modules that was used to build it.

The only constant thing about our systems is that they change

Things have a habit of changing on a server when you aren't paying attention. We might be tempted to apply quick changes that we are sure won't break anything and that we therefore forget about as soon as we've made them.

When applying configuration to a server, consider that push configuration presents a security vulnerability, as it opens up a vector that attackers might use to connect and make unauthorized changes to your servers.


Comments

Popular posts from this blog

Auto Mapper and Record Types - will they blend?

Unit testing your Azure functions - part 2: Queues and Blobs

Testing WCF services with user credentials and binary endpoints