How Terraform works
I had recently published a Terraform provider for CircleCI.
I was motivated to understand better what is happening under all that fun when we execute the Terraform commands.
Here is my attempt to summarize how Terraform works under the hood.
Behind the magic
We can see Terraform as an ecosystem;
There is the Terraform core (including its CLI), and a registry of providers and modules.
Ultimately, you can think of the Terraform core as a state machine.
It stores the current state of your stack, and syncs the state of your stack against the cloud, via the right providers, based on your Terraform .tf files.
To support the sync, all providers need to implement the CRUD functions on the resource (so that Terraform can create, read, update and delete an AWS EC2 instance, for example).
If you are a cloud service provider that already exposes a RESTful API, your services are very much āTerraform-ableā then.
Terraform core talks to the provider via gRPC.
This is one of the many reasons why Hashicorp recommend providers to be written in Go.