For a previous startup a couple of years ago I tried to get our infra onboarded with terraform, hit a bunch of blockers, switched to Pulumi, and have used it for every project big or small since.
Hits a really nice sweet spot for me -- yes, you want your infra definition to be declarative, but being able to write real code in a real language (Typescript in my case) that generates that declarative infra definition is exactly the right level of abstraction imho.
It was my first time working with Pulumi and despite not being sure yet how I truly feel about TypeScript - it was a pleasant experience to be able to use programming constructs I'm already familiar with.
I think that's the real leg up that Pulumi has on Terraform.
With HCL / Terraform - you're supposed to be dealing with configuration, but - we also need loops and maps - so we sort of get a mix between a configuration language and a programming language.
As soon as you need to do something even moderately complex you're in a world of pain (automatically deploying and validating Route 53 records via DNS in AWS, I'm looking at you...).
Comments
For a previous startup a couple of years ago I tried to get our infra onboarded with terraform, hit a bunch of blockers, switched to Pulumi, and have used it for every project big or small since.
Hits a really nice sweet spot for me -- yes, you want your infra definition to be declarative, but being able to write real code in a real language (Typescript in my case) that generates that declarative infra definition is exactly the right level of abstraction imho.
This very much gels with my own experience.
It was my first time working with Pulumi and despite not being sure yet how I truly feel about TypeScript - it was a pleasant experience to be able to use programming constructs I'm already familiar with.
I think that's the real leg up that Pulumi has on Terraform.
With HCL / Terraform - you're supposed to be dealing with configuration, but - we also need loops and maps - so we sort of get a mix between a configuration language and a programming language.
As soon as you need to do something even moderately complex you're in a world of pain (automatically deploying and validating Route 53 records via DNS in AWS, I'm looking at you...).