Terraform enables you to define your infrastructure resources, such as virtual machines, networks, storage, and more, in code. This helps in versioning, collaboration, and maintaining a consistent infrastructure state.

You describe the desired state of your infrastructure using HashiCorp Configuration Language (HCL) or JSON. Terraform will then take care of figuring out the necessary actions to reach that state

Terraform supports multiple cloud providers and infrastructure platforms, such as AWS, Azure, Google Cloud Platform (GCP), VMware, and more. Each provider has its own set of resources and data sources that you can manage using Terraform.

Resources are the building blocks of your infrastructure. They represent the actual components you want to create or manage, like virtual machines, databases, security groups, etc.

Data sources allow you to fetch information from the providers without creating any resources. For example, you can retrieve information about existing resources to use in your configurations.
Terraform maintains a state file that keeps track of the resources it creates and manages. This state file is crucial for Terraform to understand what changes need to be applied to the infrastructure.

Before making any changes to the actual infrastructure, Terraform provides a "plan" phase where it shows you what changes it intends to make. After reviewing the plan, you can execute the "apply" command to make those changes.

Modules allow you to encapsulate and reuse parts of your infrastructure configuration. They help to create reusable components and promote better organization of your codebase.