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.