The usual pitch for replacing HCL files with a general-purpose language is loops and functions. Sometimes that's a fair point. But the complaint that tends to ride along with it is drift, and drift isn't a language problem.
HCL is a structured configuration syntax. Blocks, attributes, expressions, plus a JSON form that maps onto the same structure. The tool reading it decides what a block means. The file states what you want. Drift is the real resource changing behind the file's back, a disk resized by hand in a web console, a tag edited by a script nobody remembers. A Python program that emits the same desired state drifts in exactly the same way.
What a general-purpose language does change is how much a reviewer has to execute in their head. With plain blocks I read the diff and know which resource moves. With a loop over a map built by a helper, I have to run it first.
For files that mostly list resources, keep the boring syntax and spend the effort on catching drift. A scheduled plan that fails loudly when reality and the file disagree does more than any rewrite.