The existing infrastructure had 18 environments, split across several siloed environments. There were no central services, a lot of overlapping resources, and nothing was joined up in any obvious way.
I took the opportunity to split everything out into two specific type: Technical and then Environment.
A Technical Stack would be any shared infrastructure by the main environment, such as a virtual network, virtual machines, AKS clusters, generic storage accounts, and key vaults.
An Environment Stack would be anything within the individual App environment needed to make it run, such as a Postgres instance, Service Bus Namespaces, Queues, and Topics, a Mongo Cluster, storage accounts, and key vaults.
If we look at the DEV and TEST environments, they would be split as follows:
There would be one Azure subscription with two dedicated Technical Stacks for DEV and TEST. Then on these Technical Stacks would be the Environment Stacks hosting the relevant iteration of the App.
Resources like virtual networks for each Technical Stack would be peered into the Operations VWAN and anything relating to each App would be hosted under the relevant Environment.
The following diagram illustrates, from a very high, the concept of the Environment Stack.
And that’s it essentially. Simple and efficient.
I hope you found this useful.