This is part of the issue with CloudFormation. I've seen monstrosities like an entire lambda function source code definition written into a plaintext key in a YAML file, and worse yet, seen this described as normal. Yes. Normal in hell is what it is.
So with all of this said, I think developments like the AWS CDK are very cool. CDK takes the approach of a high level SDK over programming in YAML or anything like it. I like it a lot. It's higher level than something like `boto` which is just raw function calls, but not so high level that you're trying to write deployment logic in YAML. You get a nice in between which is written to behave in whatever language you use it in. I believe this approach was spearheaded by AWS internally after seeing how CFN become something widely considered a failure.