The Project
When a new system or services is deployed, it starts out fully patched and configured specifically to provide the service. Over time, the system becomes outdated and the configuration changes subtlety either due to human intervention or changes in the underlying software.
Terraform
From the first moment that I used Terraform, I was hooked. It was able to do everything that my PowerShell scripts were already doing, but in a stateful manner. I also quickly picked up on HashiCorp's HCL syntax and appreciated the flexibility it offered.
Persistent Data
After I switched our deployment process to using Terraform, the next problem to solve was how to make the systems more ephemeral. This was not too challenging with Linux, as I could use storage accounts (or storage buckets in AWS) to save persistent data to. The biggest issue was with our Windows VMs, where I needed the ability to destroy a VM and recreate it, but persist user data.
Packer
I was ready to create my images using Packer. Unlike "Golden Images" that were popular a few years ago, images built with Packer require no manual configuration. The software will pull the specified version of the operating system, usually using the latest patch, and will apply any post-installation processes you may require.
Wrap Up
Terraform and Packer are an incredible combination, and gave me the ability to create immutable systems that could be destroyed and recreated at will.