Terraform is okay, if you don't value things like "loops that aren't an awful hack", but in 2019 Pulumi is significantly better and their cloud-agnostic implementation actually kinda works okay.
Infrastructure-as-verisonable-flat-configuration-files should not be thought of as infrastructure-as-code.