Because your projects are automated and reproducible via IaaC an environment could be simply considered a "version" of your projects.
Usual common environments naming are:
really those are just common names, and could be of any kind.
So an environment, will be a call to your IaaC with different parameters; for
example if you were to call our public Magento stack
you might want in
dev to make your environment smaller than the
In this terraform sample
you would not enable
multi-az on RDS, you would put only one
maybe with less storage too; whereas you would enable those in
if you were to improve this stack, we could imagine an AWS Cloudfront component
for content delivery, that would be enabled only for production too.
This highlights the concept of env shifting mentioned in IaaC, you could still have some for economic or technical reasons, but those would be much better controlled.