No mention of the Terraform CDK? Maybe do your homework and a fair comparison. Author obviously likes Pulumi, which btw builds on TF...
Also note that Pulumi is now supporting Yaml (TF like) inputs. Turns out, when you write these things in one language, they are not useable from another language, which means you may have to duplicate functionality.
BTW, I wonder if it'd be possible to abstract away the cloud provider and have "generic" building blocks. If I decide to move my (modest) infra from AWS to Google, if I could run the same definition with a command-line switch and have the same-ish commodity elements (VMs, jump-hosts, buckets, API gateways, HTTP load balancers, all the things every self-respecting cloud provider has).
And, if my cloud provider isn't self-respecting, the deployment could error out with a message like "X doesn't support Y".
When forced to use Terraform, I frequently curse and threaten to write an equivalent in Lisp (because, of course, Lisp is perfect to both describe infrastructure AND to run an actual deployment process), but this is close. And won't scare people away with lots of insane, stupid parentheses.
Also note that Pulumi is now supporting Yaml (TF like) inputs. Turns out, when you write these things in one language, they are not useable from another language, which means you may have to duplicate functionality.
Biased piece, no need to read
https://www.terraform.io/cdktf
My approach is to write in CUE and then eject as JSON for TF to consume. The idea that writing in a procedural language is a bad idea.
"Wrap code with config, not config with code"