I always thought CloudFormation was also less extensible, but it looks like they have Lambda-based macros now, which might actually be less hassle than writing gRPC plugin servers for Terraform.
Now I need to look up how to extend Pulumi. I'm reluctant to use anything that will require generating a lot of Go code.