I dont' really have strong opinions (at the moment) regarding which config management system is best. For now, I'm managing a relatively simple topology/infrastructure or whatever the hell you want to call it.
We're running everything on AWS. We have multiple services, each of which is just a jar file run as a service on an EC2 instance. We have prod and stage environments, wherein the same services run but backed by different dependencies, i.e. stage services point to a stage RDS and redis instance, etc. So, for the most part, deploying changes to production means simply getting the new artifact (jar) onto a box somewhere. This is simple, I know. I'm just trying to figure out a solution that makes sense.
Here's the approaches I've tried so far:
packer + terraform - bake a new AMI, supply the id to terraform and replace existing instances with new ones.
ansible - use provisioning callbacks to have newly launched instances "phone home" and get provisioned by ansible. Existing instances can be updated by