At a previous project we used the following to deploy our terraform code: https://github.com/mergermarket/cdflow
The practical advantage of this is the build process simply uses
cdflow deploy envname.
This enforces the similarity of environments, differences only exist in the environment files.
This does make the terraform scripts slightly more complex (although frequently names are postfixed by an environment).