As your Terraform codebase grows in size and reach, you might find yourself in one of these common scenarios:
- enabling contributions from specific teams (e.g. NetOps to create new subnets or firewall rules, or the Logging and Monitoring team to configure new alerts) can be difficult since Terraform knowledge is not widespread across teams
- the repetitive creation of resources of a given kind (e.g. firewall rules, subnets, projects) is scattered throughout your codebase, making it complex to get a clear picture of their structure
- sticking to a monolithic, end-to-end approach for a large infrastructure (i.e. describing your whole infrastructure in a large terraform module/state) makes for a slower, less maintainable codebase, which doesn’t mirror the different speeds at which your infra evolves (e.g. core infrastructure vs firewall rules)