Comment by gchamonlive

5 days ago

It's designed to be a declarative DSL, but then you have to do all sorts of filters and maps in any group of resources and suddenly you are programming in yaml with both hands tied behind your back

Yeah it’s just terrible. If Amazon knew what was good they’d just replace it with almost anything else. Heck just got all in on terraform and call it a day.

  • This may be heresy in an AWS thread, but as a concept Bicep actually isn't terrible: https://github.com/Azure/bicep/blob/v0.37.4/src/Bicep.Cli.E2...

    It does compile down to Azure Resource Manager's json DSL, so in that way close to Troposphere I guess, only both sides are official and not just some rando project that happens to emit yaml/json

    The implementation, of course, is ... very Azure, so I don't mean to praise using it, merely that it's a better idea than rawdogging json

    • I’ve heard so many bad things about bicep on Azure that I’m not convinced it’s an upgrade over TF.

      The syntax does look nicer but sadly that’s just a superficial improvement.

  • As for "go all in on terraform," I pray to all that is holy every night that terraform rots in the hell that spawned it. And that's not even getting into the rug pull parts, I mean the very idea of

    1. I need a goddamn CLI to run it (versus giving someone a URL they can load in their tenant and have running resources afterward)

    1. the goddamn CLI mandates live cloud credentials, but then stright-up never uses them to check a goddamn thing it intends to do to my cloud control plane

    You may say "running 'plan' does" and I can offer 50+ examples clearly demonstrating that it does not catch the most facepalm of bugs

    1. related to that, having a state file that believes it knows what exists in the world is just ludicrous and pain made manifest

    1. a tool that thinks nuking things is an appropriate fix ... whew. Although I guess in our new LLM world, saying such things makes me the old person who should get onboard the "nothing matters" train

    and the language is a dumpster, imho

    • There's a lot wrong with Terraform but I don't think you're being at all fair with your specific critisims here:

      > 1. I need a goddamn CLI to run it (versus giving someone a URL they can load in their tenant and have running resources afterward)

      CloudFormation is the only IaC that supports "running as a URL" and that's only because it's an AWS native solution. And CloudFormation is a hell of a lot more painful to write and slower to iterate on. So you're not any better off for using CF.

      What usually happens with TF is you'd build a deploy pipeline. Thus you can test via the CLI then deploy via CI/CD. So you're not limited to just the CLI. But personally, I don't see the CLI as a limitation.

      > the goddamn CLI mandates live cloud credentials, but then stright-up never uses them to check a goddamn thing it intends to do to my cloud control plane

      All IaC requires live cloud credentials. It would be impossible for them to work without live credentials ;)

      Terraform does do a lot of checking. I do agree there is a lot that the plan misses though. That's definitely frustrating. But it's a side effect of cloud vendors having arbitrary conditions that are hard to define and forever changing. You run into the same problem with any tool you'd use to provision. Heck, even manually deploying stuff from the web console sometimes takes a couple of tweaks to get right.

      > 1. related to that, having a state file that believes it knows what exists in the world is just ludicrous and pain made manifest

      This is a very strange complaint. Having a state file is the bare minimum any IaC NEEDS for it to be considered a viable option. If you don't like IaC tracking state then you're really little better off than managing resources manually.

      > a tool that thinks nuking things is an appropriate fix ... whew.

      This is grossly unfair. Terraform only destroys resources when:

      1. you remove those resources from the source. Which is sensible because you're telling Terraform you no longer want those resources

      2. when you make a change that AWS doesn't support doing on live resources. Thus the limitation isn't Terraform, it is AWS

      In either scenario, the destroy is explicit in the plan and expected behaviour.

      2 replies →

    • All Terraform does is build a DAG, compare it with the current state file and pass the changes down to the provider so it can translate to the correct sequence of interactions with the upstream API. Most of your criticism boils down to limitations of the cloud provider API and/or Terraform provider quality. It won't check for naming collision for instance, it assumes you know what you are doing.

      Regarding HCL, I respect their decision to keep the language minimal, and for all it's worth you can go very, very far with the language expressions and using modules to abstract some logic, but I think it's a fair criticism for the language not to support custom functions and higher level abstractions.

    • Amen, and I would add to that list “no, just because you use terraform doesn’t mean you can simply switch between cloud providers”.

      3 replies →