5 ms·
Ask HN: CDK vs. Terraform – which one do you prefer and why?
Pretty much the title
- chrismeller 3y agoI haven't spent a ton of time in either lately, but I do lean heavily towards Terraform simply because it's vendor agnostic. I'm probably never going to end up switching completely between providers, but I like having the ability to mix and match services if I do need to.
- verdverm 3y agoDon't use AWS, so CDK is not an option
- simplesagar 3y agoDefinitely Terraform for me: - Vendor agnostic but you do have to write separate code per vendor - Better state management capabilities - Fastest growing dev community in IAC space (except for maybe Pulumi?) - I don't know the current state of CDK but last year imports weren't really supported so there was no way to reconcile state with existing hand rolled infra. Speaks to TF's drift detection being a core capability.
- redundantly 3y ago> Vendor agnostic but you do have to write separate code per vendor wat
- deleted 3y ago[deleted]
- nsonha 3y agoas opposed to using a different set of tool AND THEN write separate code for each vendor
- redundantly 3y agoThat isn't vendor agnostic.
- nsonha 3y agovendor agnostic doesn't exist
- fwungy 3y agoDepends. Terraform can get ugly for a large codebase. You have a lot of power with an actual programming language instead of YAML. But CDK is more complicated and the learning curve is higher. My preference would be Terraform for small-mid sized infra and CDK for larger installations where code abstraction and reuse was more important. But they both disappoint in their own ways. Orchestration is the great unsolved problem of the cloud.
- mattpallissard 3y agoI agree with this sentiment entirely. To add to that; if you're dealing with multiple cloud providers it's a lot nicer to push a standard configuration, say networking, into a type system. Then you implement interfaces that accept that configuration and handle the provider specific bits. That way the day-to-day tweaking of the config is the same, regardless of provider.
- mlhpdx 3y agoNeither. SAM and vanilla CloudFormation are my choice. Don’t get in the way, less fussy and are easier to maintain in the long term.
- ActorNightly 3y agoDepends on the project. Terraform is for when you are doing large projects in company, and want to have additional management features that CDK doesn't have. On the flip side, for personal projects, you can get away with using boto3 library with the api it provides to create infrastructure, considering infrastructure probably won't change much, and its free. You pretty much just have to write a little wrapper to create the resource if it doesn't exist, then modify its attributes whether its just been created or if it already exists. CDK, and pure cloudformation, and others are somewhere in between
- joshSzep 3y agoUsing Terraform, but secretly admiring Pulumi (Python)
- superdeeda 3y agoTerraform, because the tooling around it is just much better for things like drift detection, showing planned changes, pipelines, etc.
- mr_o47 3y agoI would recommend using Terraform, It has much better support and the documentation. CDK is great if you are only using AWS but Documentation sucks. I actually worked on CFN team and we interacted a lot with CDK Team. It's actually written in TypeScript and then constructs are converted to other languages using Projen
- JimmyAustin 3y agoCDK for Terraform (https://developer.hashicorp.com/terraform/cdktf https://developer.hashicorp.com/terraform/cdktf) is the best of both worlds. We've been using it at Replit with great success.
- xyzzy123 3y agoOur team uses CDK or CFN for building aws "platform level" infra (ie is go to for infra roles who build / maintain kube clusters or account level stuff), but terraform as the iac for devs who manage their own app-level resources eg rds, queues, hsms etc. The rationale is that CDK/CFN seems to work more reliably "at scale" for commonly used stacks due to low drama rollbacks etc. Roles that are primarily infra tend to not mind using aws focused tooling. For devs, the documentation and usability of terraform is just better, plus the wide range of 3rd party integrations is handy. While it can be fiddly / not as scalable it's also a lot easier to adopt resources or refactor stuff which you tend to need more with "precious" long lived app resources.
- nikolay 3y agoPulumi.