Getting Started with PowerShell DSC
Whenever I explain to people the common failure points for the deployment of an application I'll often draw a triangle. One point is for application code, another for application configuration and the other for server configuration. (Of course there are plenty of other ways for a deployment to fail but if it's because the power to your server room has failed you have a different class of problem.) Minimising the chances of application code being the culprit starts with good coding practices such as appropriate use of design patterns, test driven development or similar -- the list goes on and everyone will have their view. This continues with practising continuous integration and deploying code to a delivery pipeline using a tool such as Release Management for Visual Studio that can manage an application's configuration between environments. But how to manage server configuration? In many organisations initial sever configuration is typically done by hand -- possibly using a build list. Over time tweaks are made by different technicians until eventually the server becomes a work of art: a one-off that nobody could reliably reproduce.
The answer to all this is tooling that implements configuration as code. Typically this means declaring in a code file what you want a server's configuration to look like and then leaving some other component to figure out how to achieve that -- and to correct any deviations that might occur. This is in contrast to an imperative code build script where you would prescribe what would happen but where you would have to take care of error handling and other factors that could cause issues.
In the non-Windows world tools such as Puppet and Chef are commonly used to automate the configuration of servers. And whilst they do have something to offer the Windows folks it's not a completely happy story because both tools require a Linux machine as the master server. For a while there wasn't a ‘native' solution to the configuration as code problem for the Windows platform however all that changed with PowerShell 4 and the release of PowerShell DSC (Desired State Configuration). If you don't already have a configuration as code solution and you are a Windows shop then PowerShell DSC is almost certainly the route of choice. There is now a wealth of options for learning PowerShell DSC and my pick of some of the best places to start is as follows:
- Windows PowerShell Desired State Configuration Overview
- Windows PowerShell Blog
- DSC Hub
- The DSC Book
- PowerShell DSC for DevOps Guidance
- Desired State Configuration in Windows Server 2012 R2 PowerShell
- A Practical Overview of Desired State Configuration
- An Overview of Windows PowerShell Desired State Configuration
- Edge Show 123 -- Desired State Configuration (DSC) with PowerShell in the Datacenter
- Windows PowerShell Desired State Configuration Fundamentals (requires Pluralsight subscription)
- Advanced Windows PowerShell Desired State Configuration (requires Pluralsight subscription)
- Getting Started with PowerShell Desired State Configuration (DSC)
- Advanced PowerShell Desired State Configuration (DSC) and Custom Resources
- Building Your Datacenter One DSC Resource at a Time
- Ten Reasons you’ll love Windows Server 2016: PowerShell and DSC
Although I haven't had chance to watch much of then yet Getting Started with PowerShell Desired State Configuration (DSC) and Advanced PowerShell Desired State Configuration (DSC) and Custom Resources are undoubtedly going to turn out to be unmissable. As I mention in my Getting Started with Windows PowerShell blog post the double act that is Jason Helmick and PowerShell inventor Jeffrey Snover is an enormously informative but but at the same time hugely entertaining combination. I chuckled and chortled all the way through their two PowerShell JumpStart series of videos and I'm expecting more of the same with these latest ones. Having fun whilst learning? What could be better?
Cheers -- Graham