I'm not too experienced with Terraform, can one use it to, for example, do a rolling deployment with something like haproxy as the load balancer?
For smaller systems one could use Ansible to create the infrastructure too, but I don't think it scales very well.
To do a rolling deployment though, it does become awkward, as you essentially have to model both the old version and the new version in your code, and then run the commands several times to scale up the new cluster and scale down the old one in stages. It's basically a modelling of a blue/green deploy.