There’s an excellent introductory series on Terraform over at Gruntwork, and apart from anything else it has a very clear introduction to what the different tools in this space do.
I recommend the blog, but here’s a quick summary of some key terms:
|Provision the servers.||Install and mange software on existing servers.|
|Terraform, CloudFormation.||Chef, Puppet, Ansible.|
|Talk to the datacentre (e.g. vSphere, OpenStack)||Talk to the server (e.g. Linux, Windows)|