I'll put in a plug for Pulumi: pulumi.com. JSON and HCL gets pretty verbose after a certain scale. I think Pulumi has a good solution for reducing the verbosity.
Using boto is another way to go like you outline here. Basically using real code is always better than using a custom DSL.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.