Chef and Puppet are configuration management tools. They are designed to configure and manage the software that is running on a machine (infrastructure) that already exists. Terraform, on the other hand, sits above that at the abstraction layer and is designed to set up all of the infrastructures that make up your system, such as load balancers, servers, DNS records, etc. In other words, Puppet and Chef are used to configure servers, while Terraform is used to create the server itself.
Chef and Puppet
As a small aside, it is possible to configure software already running on a machine through Terraform using provisioners, but this should be done with caution. It is best to leave this type of configuration to specialized tools like Puppet and Chef. Provisioners and their use case will be covered later in the course.