The repo contains an example of using nested templates and a convention based approach to create a simple to manage and extend Virtal Network. It is designed to be expanded upon with additonal standard networking resources as a demo.
The template can be executed via the above buttons, alternatively use the deployment script. For example:
.\Deploy-AzureResourceGroup.ps1 -ArtifactStagingDirectory .\sample-network -ResourceGroupLocation "Australia East" -UploadArtifacts
More explanation at https://rossm.tech/2019/01/an-arm-based-virtual-network-designed-for-change/
Note: A limitation (see issue 17978) with the use of references within an ARM template in combination with IF statements exists at the time of writing, which influenced the method in which the conditional logic for skipping NSG allocation to the GatewaySubnet was achived, and duplication of the NSG / UDR resource name / ID creation is required which isn't ideal. Once the issue if resolved, this can be fixed to use the output values 'nsgResourceId' and 'udrResourceId' from the nested deployment in combination with the IF statement.